提交 05a60067 编写于 作者: I iklam

8011048: Possible reading from unmapped memory in UTF8::as_quoted_ascii()

Summary: Pass utf_length parameter to UTF8::as_quoted_ascii()
Reviewed-by: dcubed, minqi
上级 245299be
...@@ -162,7 +162,7 @@ char* Symbol::as_quoted_ascii() const { ...@@ -162,7 +162,7 @@ char* Symbol::as_quoted_ascii() const {
const char *ptr = (const char *)&_body[0]; const char *ptr = (const char *)&_body[0];
int quoted_length = UTF8::quoted_ascii_length(ptr, utf8_length()); int quoted_length = UTF8::quoted_ascii_length(ptr, utf8_length());
char* result = NEW_RESOURCE_ARRAY(char, quoted_length + 1); char* result = NEW_RESOURCE_ARRAY(char, quoted_length + 1);
UTF8::as_quoted_ascii(ptr, result, quoted_length + 1); UTF8::as_quoted_ascii(ptr, utf8_length(), result, quoted_length + 1);
return result; return result;
} }
......
/* /*
* Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -180,11 +180,12 @@ int UTF8::quoted_ascii_length(const char* utf8_str, int utf8_length) { ...@@ -180,11 +180,12 @@ int UTF8::quoted_ascii_length(const char* utf8_str, int utf8_length) {
} }
// converts a utf8 string to quoted ascii // converts a utf8 string to quoted ascii
void UTF8::as_quoted_ascii(const char* utf8_str, char* buf, int buflen) { void UTF8::as_quoted_ascii(const char* utf8_str, int utf8_length, char* buf, int buflen) {
const char *ptr = utf8_str; const char *ptr = utf8_str;
const char *utf8_end = ptr + utf8_length;
char* p = buf; char* p = buf;
char* end = buf + buflen; char* end = buf + buflen;
while (*ptr != '\0') { while (ptr < utf8_end) {
jchar c; jchar c;
ptr = UTF8::next(ptr, &c); ptr = UTF8::next(ptr, &c);
if (c >= 32 && c < 127) { if (c >= 32 && c < 127) {
...@@ -196,6 +197,7 @@ void UTF8::as_quoted_ascii(const char* utf8_str, char* buf, int buflen) { ...@@ -196,6 +197,7 @@ void UTF8::as_quoted_ascii(const char* utf8_str, char* buf, int buflen) {
p += 6; p += 6;
} }
} }
assert(p < end, "sanity");
*p = '\0'; *p = '\0';
} }
......
/* /*
* Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -45,7 +45,7 @@ class UTF8 : AllStatic { ...@@ -45,7 +45,7 @@ class UTF8 : AllStatic {
static int quoted_ascii_length(const char* utf8_str, int utf8_length); static int quoted_ascii_length(const char* utf8_str, int utf8_length);
// converts a utf8 string to quoted ascii // converts a utf8 string to quoted ascii
static void as_quoted_ascii(const char* utf8_str, char* buf, int buflen); static void as_quoted_ascii(const char* utf8_str, int utf8_length, char* buf, int buflen);
// converts a quoted ascii string to utf8 string. returns the original // converts a quoted ascii string to utf8 string. returns the original
// string unchanged if nothing needs to be done. // string unchanged if nothing needs to be done.
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册