mirror of
https://codeberg.org/scip/pcp.git
synced 2025-12-17 12:00:56 +01:00
removed redundant code and fixed an invalid read of size 1 in ...unpadfour()
This commit is contained in:
62
libpcp/z85.c
62
libpcp/z85.c
@@ -45,7 +45,7 @@ unsigned char *pcp_unpadfour(unsigned char *src, size_t srclen, size_t *dstlen)
|
|||||||
|
|
||||||
outlen = srclen;
|
outlen = srclen;
|
||||||
|
|
||||||
for(i=srclen; i>0; --i) {
|
for(i=srclen-1; i>0; --i) {
|
||||||
if(src[i] != '\0') {
|
if(src[i] != '\0') {
|
||||||
outlen = i + 1;
|
outlen = i + 1;
|
||||||
break;
|
break;
|
||||||
@@ -57,50 +57,27 @@ unsigned char *pcp_unpadfour(unsigned char *src, size_t srclen, size_t *dstlen)
|
|||||||
}
|
}
|
||||||
|
|
||||||
unsigned char *pcp_z85_decode(char *z85block, size_t *dstlen) {
|
unsigned char *pcp_z85_decode(char *z85block, size_t *dstlen) {
|
||||||
unsigned char *bin;
|
unsigned char *bin = NULL;
|
||||||
int i, pos;
|
unsigned char *raw = NULL;
|
||||||
size_t zlen, binlen, outlen;
|
size_t binlen, outlen;
|
||||||
|
|
||||||
zlen = strlen(z85block);
|
binlen = strlen(z85block) * 4 / 5;
|
||||||
char *z85 = ucmalloc(zlen+1);
|
|
||||||
|
|
||||||
/* remove newlines */
|
|
||||||
pos = 0;
|
|
||||||
for(i=0; i<zlen+1; ++i) {
|
|
||||||
if(z85block[i] != '\r' && z85block[i] != '\n') {
|
|
||||||
z85[pos] = z85block[i];
|
|
||||||
pos++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
binlen = strlen (z85) * 4 / 5;
|
|
||||||
bin = ucmalloc(binlen);
|
bin = ucmalloc(binlen);
|
||||||
bin = zmq_z85_decode(bin, z85);
|
|
||||||
|
|
||||||
if(bin == NULL) {
|
if(zmq_z85_decode(bin, z85block) == NULL) {
|
||||||
free(z85);
|
|
||||||
fatal("zmq_z85_decode() failed, input size ! % 5");
|
fatal("zmq_z85_decode() failed, input size ! % 5");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
_dump("bin", bin, binlen);
|
raw = pcp_unpadfour(bin, binlen, &outlen);
|
||||||
|
|
||||||
fwrite(bin, 1, binlen, stderr);
|
|
||||||
|
|
||||||
unsigned char *raw = NULL;
|
|
||||||
if(bin != NULL) {
|
|
||||||
raw = pcp_unpadfour(bin, binlen, &outlen);
|
|
||||||
}
|
|
||||||
|
|
||||||
free(z85);
|
|
||||||
|
|
||||||
*dstlen = outlen;
|
*dstlen = outlen;
|
||||||
|
|
||||||
return raw;
|
return raw;
|
||||||
}
|
}
|
||||||
|
|
||||||
char *pcp_z85_encode(unsigned char *raw, size_t srclen, size_t *dstlen) {
|
char *pcp_z85_encode(unsigned char *raw, size_t srclen, size_t *dstlen) {
|
||||||
int pos, b;
|
int pos;
|
||||||
size_t outlen, blocklen, zlen;
|
size_t outlen, blocklen, zlen;
|
||||||
|
|
||||||
/* make z85 happy (size % 4) */
|
/* make z85 happy (size % 4) */
|
||||||
@@ -116,24 +93,6 @@ char *pcp_z85_encode(unsigned char *raw, size_t srclen, size_t *dstlen) {
|
|||||||
blocklen = (zlen + ((zlen / 72) * 2)) + 1;
|
blocklen = (zlen + ((zlen / 72) * 2)) + 1;
|
||||||
char *z85block = ucmalloc(blocklen);
|
char *z85block = ucmalloc(blocklen);
|
||||||
|
|
||||||
/* fprintf(stderr, "zlen: %d, outlen: %d, srclen: %d, blocklen: %d\n", */
|
|
||||||
/* zlen, outlen, srclen, blocklen); */
|
|
||||||
|
|
||||||
pos = b = 0;
|
|
||||||
/*
|
|
||||||
for(i=0; i<zlen; ++i) {
|
|
||||||
if(pos >= 71) {
|
|
||||||
*z85block++ = '\r';
|
|
||||||
*z85block++ = '\n';
|
|
||||||
pos = 1;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
pos++;
|
|
||||||
}
|
|
||||||
*z85block++ = z85[i];
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
char *z = &z85[0];
|
char *z = &z85[0];
|
||||||
char *B = &z85block[0];
|
char *B = &z85block[0];
|
||||||
|
|
||||||
@@ -150,9 +109,6 @@ char *pcp_z85_encode(unsigned char *raw, size_t srclen, size_t *dstlen) {
|
|||||||
}
|
}
|
||||||
*B = '\0';
|
*B = '\0';
|
||||||
|
|
||||||
/* fprintf(stderr, "z85block len: %d\n", blocklen, strlen(z85block)); */
|
|
||||||
/* fprintf(stderr, "z85block: <%s>\n", z85block); */
|
|
||||||
|
|
||||||
*dstlen = blocklen;
|
*dstlen = blocklen;
|
||||||
free(z85);
|
free(z85);
|
||||||
free(padded);
|
free(padded);
|
||||||
|
|||||||
@@ -129,6 +129,7 @@ int pcpz85_decode(char *infile, char *outfile) {
|
|||||||
goto errdz3;
|
goto errdz3;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
free(encoded);
|
||||||
free(decoded);
|
free(decoded);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
|||||||
@@ -347,7 +347,7 @@ temporarily disabled
|
|||||||
<test check-if-catch-missing-newlines>
|
<test check-if-catch-missing-newlines>
|
||||||
prepare = perl -e 'print "X" x 5000; print "\n"' > testfile-toolong
|
prepare = perl -e 'print "X" x 5000; print "\n"' > testfile-toolong
|
||||||
cmd = $pcp -V $vault -P -I testfile-toolong
|
cmd = $pcp -V $vault -P -I testfile-toolong
|
||||||
expect = /line is too long/
|
expect = /Error: decoded input/
|
||||||
</test>
|
</test>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
Reference in New Issue
Block a user