summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSergio Giro2016-07-11 07:22:43 -0500
committerandroid-build-merger2016-07-11 07:22:43 -0500
commit502602366c3bc4c2290ad36f3827de20a11a6753 (patch)
treec1d3f4a6f0fe8ad49de09d25a762f99281013489 /libutils/String8.cpp
parentd377004c987e0509ba4cb706aa5dc0dfd3379219 (diff)
parent7714abac6bddf3c27622730645400a474a6ad2b5 (diff)
downloadplatform-system-core-502602366c3bc4c2290ad36f3827de20a11a6753.tar.gz
platform-system-core-502602366c3bc4c2290ad36f3827de20a11a6753.tar.xz
platform-system-core-502602366c3bc4c2290ad36f3827de20a11a6753.zip
Merge \"libutils/Unicode.cpp: Correct length computation and add checks for utf16->utf8\" into nyc-mr1-dev
am: 7714abac6b Change-Id: I63e0299219dc1e50b31a88384fed7f3f43e9f86e
Diffstat (limited to 'libutils/String8.cpp')
-rw-r--r--libutils/String8.cpp25
1 files changed, 13 insertions, 12 deletions
diff --git a/libutils/String8.cpp b/libutils/String8.cpp
index ad4528291..cacaf91b8 100644
--- a/libutils/String8.cpp
+++ b/libutils/String8.cpp
@@ -104,20 +104,21 @@ static char* allocFromUTF16(const char16_t* in, size_t len)
104{ 104{
105 if (len == 0) return getEmptyString(); 105 if (len == 0) return getEmptyString();
106 106
107 const ssize_t bytes = utf16_to_utf8_length(in, len); 107 // Allow for closing '\0'
108 if (bytes < 0) { 108 const ssize_t resultStrLen = utf16_to_utf8_length(in, len) + 1;
109 if (resultStrLen < 1) {
109 return getEmptyString(); 110 return getEmptyString();
110 } 111 }
111 112
112 SharedBuffer* buf = SharedBuffer::alloc(bytes+1); 113 SharedBuffer* buf = SharedBuffer::alloc(resultStrLen);
113 ALOG_ASSERT(buf, "Unable to allocate shared buffer"); 114 ALOG_ASSERT(buf, "Unable to allocate shared buffer");
114 if (!buf) { 115 if (!buf) {
115 return getEmptyString(); 116 return getEmptyString();
116 } 117 }
117 118
118 char* str = (char*)buf->data(); 119 char* resultStr = (char*)buf->data();
119 utf16_to_utf8(in, len, str); 120 utf16_to_utf8(in, len, resultStr, resultStrLen);
120 return str; 121 return resultStr;
121} 122}
122 123
123static char* allocFromUTF32(const char32_t* in, size_t len) 124static char* allocFromUTF32(const char32_t* in, size_t len)
@@ -126,21 +127,21 @@ static char* allocFromUTF32(const char32_t* in, size_t len)
126 return getEmptyString(); 127 return getEmptyString();
127 } 128 }
128 129
129 const ssize_t bytes = utf32_to_utf8_length(in, len); 130 const ssize_t resultStrLen = utf32_to_utf8_length(in, len) + 1;
130 if (bytes < 0) { 131 if (resultStrLen < 1) {
131 return getEmptyString(); 132 return getEmptyString();
132 } 133 }
133 134
134 SharedBuffer* buf = SharedBuffer::alloc(bytes+1); 135 SharedBuffer* buf = SharedBuffer::alloc(resultStrLen);
135 ALOG_ASSERT(buf, "Unable to allocate shared buffer"); 136 ALOG_ASSERT(buf, "Unable to allocate shared buffer");
136 if (!buf) { 137 if (!buf) {
137 return getEmptyString(); 138 return getEmptyString();
138 } 139 }
139 140
140 char* str = (char*) buf->data(); 141 char* resultStr = (char*) buf->data();
141 utf32_to_utf8(in, len, str); 142 utf32_to_utf8(in, len, resultStr, resultStrLen);
142 143
143 return str; 144 return resultStr;
144} 145}
145 146
146// --------------------------------------------------------------------------- 147// ---------------------------------------------------------------------------