[Redbutton-devel] SF.net SVN: redbutton: [465] redbutton-author/trunk
Brought to you by:
skilvington
|
From: <ski...@us...> - 2007-11-19 16:45:03
|
Revision: 465
http://redbutton.svn.sourceforge.net/redbutton/?rev=465&view=rev
Author: skilvington
Date: 2007-11-19 08:44:26 -0800 (Mon, 19 Nov 2007)
Log Message:
-----------
stop parsing if we find an error
Modified Paths:
--------------
redbutton-author/trunk/ccc.y
redbutton-author/trunk/mhegd.c
Modified: redbutton-author/trunk/ccc.y
===================================================================
--- redbutton-author/trunk/ccc.y 2007-11-16 17:20:21 UTC (rev 464)
+++ redbutton-author/trunk/ccc.y 2007-11-19 16:44:26 UTC (rev 465)
@@ -982,12 +982,14 @@
if(keep_tag(asn1tagclass(item->name)))
{
buf_append(&state.decode_fns, "\t\tfseek(der, -sublen, SEEK_CUR);\n");
- buf_append(&state.decode_fns, "\t\tasn1decode_%s(der, out, sublen + tag.length);\n", item->name);
+ buf_append(&state.decode_fns, "\t\tsublen = asn1decode_%s(der, out, sublen + tag.length);\n", item->name);
}
else
{
- buf_append(&state.decode_fns, "\t\tasn1decode_%s(der, out, tag.length);\n", item->name);
+ buf_append(&state.decode_fns, "\t\tsublen = asn1decode_%s(der, out, tag.length);\n", item->name);
}
+ buf_append(&state.decode_fns, "\t\tif(sublen < 0)\n");
+ buf_append(&state.decode_fns, "\t\t\treturn der_error(\"%s\");\n", name);
buf_append(&state.decode_fns, "\t\tleft -= tag.length;\n");
buf_append(&state.decode_fns, "\t}\n");
/* is it a type that is encoded as a NULL if it is not present */
@@ -1051,12 +1053,14 @@
if(keep_tag(asn1tagclass(item->name)))
{
buf_append(&state.decode_fns, "\t\t\tfseek(der, -sublen, SEEK_CUR);\n");
- buf_append(&state.decode_fns, "\t\t\tasn1decode_%s(der, out, sublen + tag.length);\n", item->name);
+ buf_append(&state.decode_fns, "\t\t\tsublen = asn1decode_%s(der, out, sublen + tag.length);\n", item->name);
}
else
{
- buf_append(&state.decode_fns, "\t\t\tasn1decode_%s(der, out, tag.length);\n", item->name);
+ buf_append(&state.decode_fns, "\t\t\tsublen = asn1decode_%s(der, out, tag.length);\n", item->name);
}
+ buf_append(&state.decode_fns, "\t\t\tif(sublen < 0)\n");
+ buf_append(&state.decode_fns, "\t\t\t\treturn der_error(\"%s\");\n", name);
buf_append(&state.decode_fns, "\t\t\tleft -= tag.length;\n");
buf_append(&state.decode_fns, "\t\t}\n");
item = item->next;
@@ -1100,7 +1104,8 @@
buf_append(&state.decode_fns, "\tleft -= sublen;\n\n");
/* the ENUMERATED value is encoded as an INTEGER */
buf_append(&state.decode_fns, "\tif(is_%s(tag.class, tag.number))\n\t{\n", name);
- buf_append(&state.decode_fns, "\t\tder_decode_ENUMERATED(der, out, tag.length, %u, enum_names);\n", enum_val);
+ buf_append(&state.decode_fns, "\t\tif((sublen = der_decode_ENUMERATED(der, out, tag.length, %u, enum_names)) < 0)\n", enum_val);
+ buf_append(&state.decode_fns, "\t\t\treturn der_error(\"%s\");\n", name);
buf_append(&state.decode_fns, "\t\tleft -= tag.length;\n");
buf_append(&state.decode_fns, "\t}\n\telse\n");
buf_append(&state.decode_fns, "\t{\n\t\treturn der_error(\"%s\");\n\t}\n\n", name);
@@ -1161,12 +1166,14 @@
if(keep_tag(asn1tagclass(item->name)))
{
buf_append(&state.decode_fns, "\t\tfseek(der, -sublen, SEEK_CUR);\n");
- buf_append(&state.decode_fns, "\t\tasn1decode_%s(der, out, sublen + tag.length);\n", item->name);
+ buf_append(&state.decode_fns, "\t\tsublen = asn1decode_%s(der, out, sublen + tag.length);\n", item->name);
}
else
{
- buf_append(&state.decode_fns, "\t\tasn1decode_%s(der, out, tag.length);\n", item->name);
+ buf_append(&state.decode_fns, "\t\tsublen = asn1decode_%s(der, out, tag.length);\n", item->name);
}
+ buf_append(&state.decode_fns, "\t\tif(sublen < 0)\n");
+ buf_append(&state.decode_fns, "\t\t\treturn der_error(\"%s\");\n", name);
buf_append(&state.decode_fns, "\t\tleft -= tag.length;\n");
buf_append(&state.decode_fns, "\t}\n");
}
Modified: redbutton-author/trunk/mhegd.c
===================================================================
--- redbutton-author/trunk/mhegd.c 2007-11-16 17:20:21 UTC (rev 464)
+++ redbutton-author/trunk/mhegd.c 2007-11-19 16:44:26 UTC (rev 465)
@@ -46,6 +46,7 @@
FILE *in_file;
FILE *out_file = stdout;
int filesize;
+ int used;
while((arg = getopt(argc, argv, "o:v")) != EOF)
{
@@ -81,7 +82,11 @@
rewind(in_file);
/* write text form of DER encoded in_file to out_file */
- if(asn1decode_InterchangedObject(in_file, out_file, filesize) != filesize)
+ used = asn1decode_InterchangedObject(in_file, out_file, filesize);
+ fprintf(out_file, "\n");
+ if(used < 0)
+ fatal("Parsing error");
+ else if(used != filesize)
fatal("Unexpected data after InterchangedObject");
return EXIT_SUCCESS;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|