[automerger] String16: remove integer overflows am: d0648d8dc6
Change-Id: Ib1bb7df40aac5be2ff7a704038279e4768b18f88
This commit is contained in:
commit
9de539d0dd
1 changed files with 36 additions and 30 deletions
|
|
@ -83,6 +83,23 @@ static char16_t* allocFromUTF8(const char* u8str, size_t u8len)
|
||||||
return getEmptyString();
|
return getEmptyString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static char16_t* allocFromUTF16(const char16_t* u16str, size_t u16len) {
|
||||||
|
if (u16len >= SIZE_MAX / sizeof(char16_t)) {
|
||||||
|
android_errorWriteLog(0x534e4554, "73826242");
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
|
||||||
|
SharedBuffer* buf = SharedBuffer::alloc((u16len + 1) * sizeof(char16_t));
|
||||||
|
ALOG_ASSERT(buf, "Unable to allocate shared buffer");
|
||||||
|
if (buf) {
|
||||||
|
char16_t* str = (char16_t*)buf->data();
|
||||||
|
memcpy(str, u16str, u16len * sizeof(char16_t));
|
||||||
|
str[u16len] = 0;
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
return getEmptyString();
|
||||||
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
|
|
||||||
String16::String16()
|
String16::String16()
|
||||||
|
|
@ -115,35 +132,9 @@ String16::String16(const String16& o, size_t len, size_t begin)
|
||||||
setTo(o, len, begin);
|
setTo(o, len, begin);
|
||||||
}
|
}
|
||||||
|
|
||||||
String16::String16(const char16_t* o)
|
String16::String16(const char16_t* o) : mString(allocFromUTF16(o, strlen16(o))) {}
|
||||||
{
|
|
||||||
size_t len = strlen16(o);
|
|
||||||
SharedBuffer* buf = SharedBuffer::alloc((len+1)*sizeof(char16_t));
|
|
||||||
ALOG_ASSERT(buf, "Unable to allocate shared buffer");
|
|
||||||
if (buf) {
|
|
||||||
char16_t* str = (char16_t*)buf->data();
|
|
||||||
strcpy16(str, o);
|
|
||||||
mString = str;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
mString = getEmptyString();
|
|
||||||
}
|
|
||||||
|
|
||||||
String16::String16(const char16_t* o, size_t len)
|
String16::String16(const char16_t* o, size_t len) : mString(allocFromUTF16(o, len)) {}
|
||||||
{
|
|
||||||
SharedBuffer* buf = SharedBuffer::alloc((len+1)*sizeof(char16_t));
|
|
||||||
ALOG_ASSERT(buf, "Unable to allocate shared buffer");
|
|
||||||
if (buf) {
|
|
||||||
char16_t* str = (char16_t*)buf->data();
|
|
||||||
memcpy(str, o, len*sizeof(char16_t));
|
|
||||||
str[len] = 0;
|
|
||||||
mString = str;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
mString = getEmptyString();
|
|
||||||
}
|
|
||||||
|
|
||||||
String16::String16(const String8& o)
|
String16::String16(const String8& o)
|
||||||
: mString(allocFromUTF8(o.string(), o.size()))
|
: mString(allocFromUTF8(o.string(), o.size()))
|
||||||
|
|
@ -200,6 +191,11 @@ status_t String16::setTo(const char16_t* other)
|
||||||
|
|
||||||
status_t String16::setTo(const char16_t* other, size_t len)
|
status_t String16::setTo(const char16_t* other, size_t len)
|
||||||
{
|
{
|
||||||
|
if (len >= SIZE_MAX / sizeof(char16_t)) {
|
||||||
|
android_errorWriteLog(0x534e4554, "73826242");
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
|
||||||
SharedBuffer* buf = SharedBuffer::bufferFromData(mString)
|
SharedBuffer* buf = SharedBuffer::bufferFromData(mString)
|
||||||
->editResize((len+1)*sizeof(char16_t));
|
->editResize((len+1)*sizeof(char16_t));
|
||||||
if (buf) {
|
if (buf) {
|
||||||
|
|
@ -222,7 +218,12 @@ status_t String16::append(const String16& other)
|
||||||
} else if (otherLen == 0) {
|
} else if (otherLen == 0) {
|
||||||
return NO_ERROR;
|
return NO_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (myLen >= SIZE_MAX / sizeof(char16_t) - otherLen) {
|
||||||
|
android_errorWriteLog(0x534e4554, "73826242");
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
|
||||||
SharedBuffer* buf = SharedBuffer::bufferFromData(mString)
|
SharedBuffer* buf = SharedBuffer::bufferFromData(mString)
|
||||||
->editResize((myLen+otherLen+1)*sizeof(char16_t));
|
->editResize((myLen+otherLen+1)*sizeof(char16_t));
|
||||||
if (buf) {
|
if (buf) {
|
||||||
|
|
@ -243,7 +244,12 @@ status_t String16::append(const char16_t* chrs, size_t otherLen)
|
||||||
} else if (otherLen == 0) {
|
} else if (otherLen == 0) {
|
||||||
return NO_ERROR;
|
return NO_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (myLen >= SIZE_MAX / sizeof(char16_t) - otherLen) {
|
||||||
|
android_errorWriteLog(0x534e4554, "73826242");
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
|
||||||
SharedBuffer* buf = SharedBuffer::bufferFromData(mString)
|
SharedBuffer* buf = SharedBuffer::bufferFromData(mString)
|
||||||
->editResize((myLen+otherLen+1)*sizeof(char16_t));
|
->editResize((myLen+otherLen+1)*sizeof(char16_t));
|
||||||
if (buf) {
|
if (buf) {
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue