OSDN Git Service

Fix for writing empty strings to Parcel::writeString8()
authorPravat Dalbehera <pravat.dalbehera@sonyericsson.com>
Wed, 15 Dec 2010 07:40:00 +0000 (08:40 +0100)
committerJohan Redestig <johan.redestig@sonyericsson.com>
Wed, 22 Dec 2010 11:57:31 +0000 (12:57 +0100)
commitd1dff8d4d47a5f9142a22b11950adc55ea2b36df
treeb5f91bbec82690ce519566656aa3f7d5afe09d88
parentfae89a5076867dd2ab4d73abd959bbbf32a23336
Fix for writing empty strings to Parcel::writeString8()

If writeString8 is called with the following sequence:

 writeString8(String8(""));
 writeString8(String8("TempString"));

Then in the readString8, the 2nd String i.e. "TempString" is not read,
instead an empty string is read.

The bug comes because of the write call for String8("") where there are
no String bytes present. In the write Statement, an extra ‘\0’ is
written. During the Marshalling, Following bytes are written:

1        2         3        4       5   ...
0x0      0x0       0xB      ‘T’     ‘e’  ...

The readString8 function has a check that, if String length is 0, don’t
read anything. So the first byte is read as the length for the first
string. The second byte i.e. ‘\0’ is read as the length for the second
string and hence the second string becomes empty too.

Change-Id: Id7acc0c80ae16e77be4331f1ddf69ea87e758420
libs/binder/Parcel.cpp