Commit 9db7ce8b authored by Lev Walkin's avatar Lev Walkin

memory layout

parent 22b5ed41
...@@ -136,7 +136,7 @@ process(const char *fname) { ...@@ -136,7 +136,7 @@ process(const char *fname) {
if((collector_size - collector_offset) <= len if((collector_size - collector_offset) <= len
|| !collector) { || !collector) {
collector_size <<= 1; collector_size <<= 1;
collector = realloc(collector, collector_size); collector = REALLOC(collector, collector_size);
if(!collector) { if(!collector) {
perror("realloc()"); perror("realloc()");
exit(EX_OSERR); exit(EX_OSERR);
......
...@@ -49,7 +49,7 @@ static int single_type_decoding = 0; /* -1 enables that */ ...@@ -49,7 +49,7 @@ static int single_type_decoding = 0; /* -1 enables that */
static int minimalistic = 0; /* -m enables that */ static int minimalistic = 0; /* -m enables that */
static int pretty_printing = 1; /* -p disables that */ static int pretty_printing = 1; /* -p disables that */
static int skip_bytes = 0; /* -s controls that */ static int skip_bytes = 0; /* -s controls that */
static char *indent_buffer = " "; /* -i controls that */ static char indent_bytes[16] = " "; /* -i controls that */
int int
main(int ac, char **av) { main(int ac, char **av) {
...@@ -66,10 +66,9 @@ main(int ac, char **av) { ...@@ -66,10 +66,9 @@ main(int ac, char **av) {
break; break;
case 'i': case 'i':
i = atoi(optarg); i = atoi(optarg);
if(i >= 0 && i < 16) { if(i >= 0 && i < (int)sizeof(indent_bytes)) {
indent_buffer = alloca(i + 1); memset(indent_bytes, ' ', i);
memset(indent_buffer, ' ', i); indent_bytes[i] = '\0';
indent_buffer[i] = '\0';
} else { } else {
fprintf(stderr, "-i %s: Invalid indent value\n",optarg); fprintf(stderr, "-i %s: Invalid indent value\n",optarg);
exit(EX_USAGE); exit(EX_USAGE);
...@@ -393,7 +392,7 @@ print_TL(int fin, asn1c_integer_t offset, int level, int constr, ssize_t tlen, b ...@@ -393,7 +392,7 @@ print_TL(int fin, asn1c_integer_t offset, int level, int constr, ssize_t tlen, b
return; return;
} }
while(level-- > 0) printf(indent_buffer); /* Print indent */ while(level-- > 0) printf(indent_bytes); /* Print indent */
printf(fin ? "</" : "<"); printf(fin ? "</" : "<");
printf(constr ? ((tlv_len == -1) ? "I" : "C") : "P"); printf(constr ? ((tlv_len == -1) ? "I" : "C") : "P");
...@@ -473,9 +472,9 @@ print_V(const char *fname, FILE *fp, ber_tlv_tag_t tlv_tag, ber_tlv_len_t tlv_le ...@@ -473,9 +472,9 @@ print_V(const char *fname, FILE *fp, ber_tlv_tag_t tlv_tag, ber_tlv_len_t tlv_le
case ASN_BASIC_OBJECT_IDENTIFIER: case ASN_BASIC_OBJECT_IDENTIFIER:
case ASN_BASIC_RELATIVE_OID: case ASN_BASIC_RELATIVE_OID:
if(tlv_len > 0 && tlv_len < 128*1024 /* VERY long OID! */) { if(tlv_len > 0 && tlv_len < 128*1024 /* VERY long OID! */) {
arcs = malloc(sizeof(*arcs) * (tlv_len + 1)); arcs = MALLOC(sizeof(*arcs) * (tlv_len + 1));
if(arcs) { if(arcs) {
vbuf = malloc(tlv_len + 1); vbuf = MALLOC(tlv_len + 1);
/* Not checking is intentional */ /* Not checking is intentional */
} }
} }
...@@ -504,7 +503,7 @@ print_V(const char *fname, FILE *fp, ber_tlv_tag_t tlv_tag, ber_tlv_len_t tlv_le ...@@ -504,7 +503,7 @@ print_V(const char *fname, FILE *fp, ber_tlv_tag_t tlv_tag, ber_tlv_len_t tlv_le
(BER_TAG_CLASS(tlv_tag) != ASN_TAG_CLASS_UNIVERSAL (BER_TAG_CLASS(tlv_tag) != ASN_TAG_CLASS_UNIVERSAL
&& pretty_printing) && pretty_printing)
) && (tlv_len > 0 && tlv_len < 128 * 1024)) { ) && (tlv_len > 0 && tlv_len < 128 * 1024)) {
vbuf = malloc(tlv_len + 1); vbuf = MALLOC(tlv_len + 1);
/* Not checking is intentional */ /* Not checking is intentional */
} }
break; break;
...@@ -522,8 +521,8 @@ print_V(const char *fname, FILE *fp, ber_tlv_tag_t tlv_tag, ber_tlv_len_t tlv_le ...@@ -522,8 +521,8 @@ print_V(const char *fname, FILE *fp, ber_tlv_tag_t tlv_tag, ber_tlv_len_t tlv_le
if(ch == -1) { if(ch == -1) {
fprintf(stderr, fprintf(stderr,
"%s: Unexpected end of file (V)\n", fname); "%s: Unexpected end of file (V)\n", fname);
if(vbuf) free(vbuf); if(vbuf) FREEMEM(vbuf);
if(arcs) free(arcs); if(arcs) FREEMEM(arcs);
return -1; return -1;
} }
switch(etype) { switch(etype) {
...@@ -592,7 +591,7 @@ print_V(const char *fname, FILE *fp, ber_tlv_tag_t tlv_tag, ber_tlv_len_t tlv_le ...@@ -592,7 +591,7 @@ print_V(const char *fname, FILE *fp, ber_tlv_tag_t tlv_tag, ber_tlv_len_t tlv_le
if(i) printf("."); if(i) printf(".");
printf("%" PRIuASN, arcs[i]); printf("%" PRIuASN, arcs[i]);
} }
free(vbuf); FREEMEM(vbuf);
vbuf = 0; vbuf = 0;
} }
} }
...@@ -614,7 +613,7 @@ print_V(const char *fname, FILE *fp, ber_tlv_tag_t tlv_tag, ber_tlv_len_t tlv_le ...@@ -614,7 +613,7 @@ print_V(const char *fname, FILE *fp, ber_tlv_tag_t tlv_tag, ber_tlv_len_t tlv_le
if(i) printf("."); if(i) printf(".");
printf("%" PRIuASN, arcs[i]); printf("%" PRIuASN, arcs[i]);
} }
free(vbuf); FREEMEM(vbuf);
vbuf = 0; vbuf = 0;
} }
} }
...@@ -657,10 +656,10 @@ print_V(const char *fname, FILE *fp, ber_tlv_tag_t tlv_tag, ber_tlv_len_t tlv_le ...@@ -657,10 +656,10 @@ print_V(const char *fname, FILE *fp, ber_tlv_tag_t tlv_tag, ber_tlv_len_t tlv_le
else else
printf("%c", vbuf[i]); printf("%c", vbuf[i]);
} }
free(vbuf); FREEMEM(vbuf);
} }
if(arcs) free(arcs); if(arcs) FREEMEM(arcs);
return 0; return 0;
} }
...@@ -676,7 +675,7 @@ decode_tlv_from_string(const char *datastring) { ...@@ -676,7 +675,7 @@ decode_tlv_from_string(const char *datastring) {
int half; int half;
dsize = strlen(datastring) + 1; dsize = strlen(datastring) + 1;
dp = data = calloc(1, dsize); dp = data = CALLOC(1, dsize);
assert(data); assert(data);
for(half = 0, p = datastring; *p; p++) { for(half = 0, p = datastring; *p; p++) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment