Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(110)

Unified Diff: third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp

Issue 2082483002: Support line-continuation character in WebGL 2.0 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix line-continuation semantic Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp
diff --git a/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp b/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp
index 1c7cf0f6b1bd990e571bc530520c1ecd66fd4eb4..6a620f40354c4829551292713317e3ca9ea52c3d 100644
--- a/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp
+++ b/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp
@@ -448,6 +448,14 @@ void StripComments::process(UChar c)
break;
case InSingleLineComment:
+ // Line-continuation characters are processed before comment processing.
+ // Advance string if a new line character is immediately behind
+ // line-continuation character.
+ if (c == '\\') {
+ if (peek(temp) && isNewline(temp))
Zhenyao Mo 2016/06/30 16:10:39 What if it's "\r\n"? Two characters but still one
Zhenyao Mo 2016/06/30 16:40:55 Never mind. It doesn't matter.
+ advance();
+ }
+
// The newline code at the top of this function takes care
// of resetting our state when we get out of the
// single-line comment. Swallow all other characters.
@@ -3856,9 +3864,9 @@ void WebGLRenderingContextBase::shaderSource(WebGLShader* shader, const String&
if (isContextLost() || !validateWebGLObject("shaderSource", shader))
return;
String stringWithoutComments = StripComments(string).result();
- // TODO(danakj): Make validateString reject characters > 255 (or utf16 Strings)
+ // TODO(danakj): Make validateShaderSource reject characters > 255 (or utf16 Strings)
// so we don't need to use StringUTF8Adaptor.
- if (!validateString("shaderSource", stringWithoutComments))
+ if (!validateShaderSource(stringWithoutComments))
return;
shader->setSource(string);
WTF::StringUTF8Adaptor adaptor(stringWithoutComments);
@@ -5469,6 +5477,25 @@ bool WebGLRenderingContextBase::validateString(const char* functionName, const S
return true;
}
+bool WebGLRenderingContextBase::validateShaderSource(const String& string)
+{
+ for (size_t i = 0; i < string.length(); ++i) {
+ // line-continuation character \ is supported in WebGL 2.0.
+ if (isWebGL2OrHigher() && string[i] == '\\') {
+ if (i + 1 >= string.length() || (string[i + 1] != '\n' && string[i + 1] != '\r')) {
+ synthesizeGLError(GL_INVALID_VALUE, "shaderSource", "line-continuation character is not immediately preceding a new-line");
Zhenyao Mo 2016/06/30 16:10:39 From reading the spec, I am not sure if it's an er
Ken Russell (switch to Gerrit) 2016/07/01 00:42:30 From my reading of the spec, the continuation char
qiankun 2016/07/01 10:32:01 Comments have already been removed before doing va
Zhenyao Mo 2016/07/01 16:53:50 Is this behavior (generating INVALID_VALUE if '\\'
+ return false;
+ }
+ continue;
+ }
+ if (!validateCharacter(string[i])) {
+ synthesizeGLError(GL_INVALID_VALUE, "shaderSource", "string not ASCII");
+ return false;
+ }
+ }
+ return true;
+}
+
bool WebGLRenderingContextBase::validateTexFuncFormatAndType(const char* functionName, TexImageFunctionType functionType, GLenum internalformat, GLenum format, GLenum type, GLint level)
{
if (!m_isWebGL2FormatsTypesAdded && isWebGL2OrHigher()) {
« no previous file with comments | « third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698