Mercurial > hg > release > icedtea7-forest-2.6 > jdk
changeset 9004:bd297baf4981
8160090: Better signature handling in pack200
Reviewed-by: jrose, mschoene
author | ksrini |
---|---|
date | Wed, 19 Oct 2016 02:27:09 +0100 |
parents | 47bb3af1c6a9 |
children | 38b3caf22e7e |
files | src/share/native/com/sun/java/util/jar/pack/unpack.cpp |
diffstat | 1 files changed, 10 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/native/com/sun/java/util/jar/pack/unpack.cpp Wed Oct 19 02:13:26 2016 +0100 +++ b/src/share/native/com/sun/java/util/jar/pack/unpack.cpp Wed Oct 19 02:27:09 2016 +0100 @@ -157,7 +157,10 @@ const char* utf8String() { assert(tagMatches(CONSTANT_Utf8)); - assert(value.b.len == strlen((const char*)value.b.ptr)); + if (value.b.len != strlen((const char*)value.b.ptr)) { + unpack_abort("bad utf8 encoding"); + // and fall through + } return (const char*)value.b.ptr; } @@ -1262,10 +1265,10 @@ CHECK; int nc = 0; - for ( const char* ncp = form.utf8String() ; *ncp; ncp++) { - if (*ncp == 'L') nc++; + for (int j = 0; j < (int)form.value.b.len; j++) { + int c = form.value.b.ptr[j]; + if (c == 'L') nc++; } - ncTotal += nc; e.refs = U_NEW(entry*, cpMap[i].nrefs = 1 + nc); CHECK; @@ -3711,8 +3714,8 @@ uint* map = (uint*) bcimap.base(); assert(len > 0); // must be initialized before using to_bci if (len == 0) { - abort("bad bcimap"); - return 0; + abort("bad bcimap"); + return 0; } if (bii < len) return map[bii]; @@ -4658,6 +4661,7 @@ entry* e = file_name.getRef(); CHECK_0; cur_file.name = e->utf8String(); + CHECK_0; bool haveLongSize = ((archive_options & AO_HAVE_FILE_SIZE_HI) != 0); cur_file.size = file_size_hi.getLong(file_size_lo, haveLongSize); if ((archive_options & AO_HAVE_FILE_MODTIME) != 0)