[Webkit-unassigned] [Bug 70107] Custom written CSS lexer
bugzilla-daemon at webkit.org
bugzilla-daemon at webkit.org
Mon Dec 12 13:33:56 PST 2011
https://bugs.webkit.org/show_bug.cgi?id=70107
--- Comment #14 from Oliver Hunt <oliver at apple.com> 2011-12-12 13:33:55 PST ---
Oh, and i still don't see how the null termination will stop the string parsing from running over the end of the buffer
(In reply to comment #12)
> Hey Oliver,
>
> actually the CSS parser working in an internal buffer, which is terminated by two '\0'-s, see the following code:
>
> void CSSParser::setupParser(const char* prefix, const String& string, const char* suffix)
> {
> int length = string.length() + strlen(prefix) + strlen(suffix) + 2;
>
> fastFree(m_data);
> m_data = static_cast<UChar*>(fastMalloc(length * sizeof(UChar)));
> for (unsigned i = 0; i < strlen(prefix); i++)
> m_data[i] = prefix[i];
>
> memcpy(m_data + strlen(prefix), string.characters(), string.length() * sizeof(UChar));
>
> unsigned start = strlen(prefix) + string.length();
> unsigned end = start + strlen(suffix);
> for (unsigned i = start; i < end; i++)
> m_data[i] = suffix[i - start];
>
> m_data[length - 1] = 0;
> m_data[length - 2] = 0;
>
> yy_hold_char = 0;
> yyleng = 0;
> yytext = yy_c_buf_p = m_data;
> yy_hold_char = *yy_c_buf_p;
> resetRuleBodyMarks();
> }
>
> Flex needs this, and I actually liked this approach, since it requires less buffer range checks (you know that any non \0 character must be followed at least two \0-s). CSS actually designed that way that '\0' is not part of any token.
--
Configure bugmail: https://bugs.webkit.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.
More information about the webkit-unassigned
mailing list