And what makes you think a "javascript string" is a "C string"? While the "string" part may be the same, "javascript" certainly does not equal "C". Just like you do not have issues with embedded zero-bytes in "pascal strings". Note that "pascal" != "C" even though "string" == "string".
Note that the sqlite3_value_text returns the data (including embedded zero bytes), but not the length. If you pass the data returned thereby to a function expecting a C string (zero terminated), it will terminate at the first zero byte encountered. If you retrieve the length and the data separately and construct pascal-style strings and pass them to functions expecting "pascal" style strings, then the embedded zero is just "string data" (NB: pascal is used only as an example -- many X strings contain an embedded length for any given value of X -- C strings do not). Obviously "javascript" strings contain a length indicator and are not zero-terminated. --- The fact that there's a Highway to Hell but only a Stairway to Heaven says a lot about anticipated traffic volume. >-----Original Message----- >From: sqlite-users [mailto:sqlite-users- >boun...@mailinglists.sqlite.org] On Behalf Of J Decker >Sent: Thursday, 19 April, 2018 16:41 >To: SQLite mailing list >Subject: Re: [sqlite] SQLite3 - Search on text field with \0 binary >data > >On Thu, Apr 19, 2018 at 3:37 PM, J Decker <d3c...@gmail.com> wrote: > >> >> >> On Thu, Apr 19, 2018 at 3:22 PM, Keith Medcalf ><kmedc...@dessus.com> >> wrote: >> >>> >>> Actually, nothing in the C or C++ world will "go past" the NULL >byte >>> since the very definition of a C string is a "bunch-o-bytes that >are >>> non-zero followed by one that is". >>> >>> And sory for the double response; but if C/C++ couldn't handle a >NUL >character (the character is 1 L) then spidermonkey/chakra/V8 would >have >problems with NUL characters in javascript strings. But it doesn't. >Why >is that? > > >> that doesnt' mean you can use a custom token structure that >contains both >> the pointer and length of the data. (which it already has) >> sure, using standard C api - strlen, etc sure... but sqlite uses a >custom >> function internally sqlite3stlren30 which can easily be extended >to take >> the length of the string; but wait, if it was saved, it wouldn't >need to be >> called, and a overall performance gain is created. >> >> the biggest problem is really the internal function >'(something)printf' >> which returns a char *, and has no space to return the length, like >> snprintf would. >> >> and I can easily put nuls into a string.... >> >> char buf[256]; >> int len = snprintf( buf, 256, "put a nul %c here and here %c", 0, 0 >); >> and the length returned would be 27. >> >> >>> If you want to embed non UTF8 text you should be using a BLOB not >TEXT. >>> Text means "an array of non-zero characters terminated by a zero >byte" and >>> a BLOB means a "bag-o-bytes" of a specific size. >>> >>> Blob means binary; havihng to deal with a binary structure to >convert to >> a string and back is ridiculous when the interface already supports >storing >> and getting strings with \0 in them. >> >> >>> Things meants to work on C "strings" should always stop at the >zero >>> terminator. Failure to do so can lead to AHBL. >>> >>> >> So don't use the standard library. That was one of the first >htings I >> created for my MUD client; a smart text string class. (I say class >in the >> generic term, not the literal, since it was written in C) >> >> >>> (Note, this applies to "wide" (as in word) and "fat" (as in double >word) >>> and obese (as in quad word) strings as well. They are a sequence >of >>> words/double-words/quad-words/ten-words (whatever) that are non- >zero >>> followed by one that is zero -- and the narrow/wide/fat/obese >string ends >>> at the zeo value). >>> >>> >> utf8everywhere.org >> No reason to use wide char. >> >> >> get good, son. (sorry if that's overly offensive) >> >> --- >>> The fact that there's a Highway to Hell but only a Stairway to >Heaven >>> says a lot about anticipated traffic volume. >>> >> >_______________________________________________ >sqlite-users mailing list >sqlite-users@mailinglists.sqlite.org >http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users _______________________________________________ sqlite-users mailing list sqlite-users@mailinglists.sqlite.org http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users