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

Side by Side Diff: gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc

Issue 8345003: Make OpenGL string entry points validate the string (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 2 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « gpu/command_buffer/service/gles2_cmd_decoder.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" 5 #include "gpu/command_buffer/service/gles2_cmd_decoder.h"
6 6
7 #include "base/atomicops.h" 7 #include "base/atomicops.h"
8 #include "gpu/command_buffer/common/gles2_cmd_format.h" 8 #include "gpu/command_buffer/common/gles2_cmd_format.h"
9 #include "gpu/command_buffer/common/gles2_cmd_utils.h" 9 #include "gpu/command_buffer/common/gles2_cmd_utils.h"
10 #include "gpu/command_buffer/common/gl_mock.h" 10 #include "gpu/command_buffer/common/gl_mock.h"
(...skipping 1133 matching lines...) Expand 10 before | Expand all | Expand 10 after
1144 EXPECT_EQ(error::kNoError, ExecuteCmd(get_cmd)); 1144 EXPECT_EQ(error::kNoError, ExecuteCmd(get_cmd));
1145 CommonDecoder::Bucket* bucket = decoder_->GetBucket(kBucketId); 1145 CommonDecoder::Bucket* bucket = decoder_->GetBucket(kBucketId);
1146 ASSERT_TRUE(bucket != NULL); 1146 ASSERT_TRUE(bucket != NULL);
1147 EXPECT_EQ(kSourceSize + 1, bucket->size()); 1147 EXPECT_EQ(kSourceSize + 1, bucket->size());
1148 EXPECT_EQ(0, memcmp(bucket->GetData(0, bucket->size()), kSource, 1148 EXPECT_EQ(0, memcmp(bucket->GetData(0, bucket->size()), kSource,
1149 bucket->size())); 1149 bucket->size()));
1150 } 1150 }
1151 1151
1152 TEST_F(GLES2DecoderTest, ShaderSourceInvalidArgs) { 1152 TEST_F(GLES2DecoderTest, ShaderSourceInvalidArgs) {
1153 const char kSource[] = "hello"; 1153 const char kSource[] = "hello";
1154 const char kBadSource[] = "hello\a";
1154 const uint32 kSourceSize = sizeof(kSource) - 1; 1155 const uint32 kSourceSize = sizeof(kSource) - 1;
1156 const uint32 kBadSourceSize = sizeof(kBadSource) - 1;
1155 memcpy(shared_memory_address_, kSource, kSourceSize); 1157 memcpy(shared_memory_address_, kSource, kSourceSize);
1156 ShaderSource cmd; 1158 ShaderSource cmd;
1157 cmd.Init(kInvalidClientId, 1159 cmd.Init(kInvalidClientId,
1158 kSharedMemoryId, kSharedMemoryOffset, kSourceSize); 1160 kSharedMemoryId, kSharedMemoryOffset, kSourceSize);
1159 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 1161 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1160 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); 1162 EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
1161 #if GLES2_TEST_SHADER_VS_PROGRAM_IDS 1163 #if GLES2_TEST_SHADER_VS_PROGRAM_IDS
1162 cmd.Init(client_program_id_, 1164 cmd.Init(client_program_id_,
1163 kSharedMemoryId, kSharedMemoryOffset, kSourceSize); 1165 kSharedMemoryId, kSharedMemoryOffset, kSourceSize);
1164 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 1166 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1165 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); 1167 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
1166 #endif // GLES2_TEST_SHADER_VS_PROGRAM_IDS 1168 #endif // GLES2_TEST_SHADER_VS_PROGRAM_IDS
1167 cmd.Init(client_shader_id_, 1169 cmd.Init(client_shader_id_,
1168 kInvalidSharedMemoryId, kSharedMemoryOffset, kSourceSize); 1170 kInvalidSharedMemoryId, kSharedMemoryOffset, kSourceSize);
1169 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); 1171 EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
1170 cmd.Init(client_shader_id_, 1172 cmd.Init(client_shader_id_,
1171 kSharedMemoryId, kInvalidSharedMemoryOffset, kSourceSize); 1173 kSharedMemoryId, kInvalidSharedMemoryOffset, kSourceSize);
1172 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); 1174 EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
1173 cmd.Init(client_shader_id_, 1175 cmd.Init(client_shader_id_,
1174 kSharedMemoryId, kSharedMemoryOffset, kSharedBufferSize); 1176 kSharedMemoryId, kSharedMemoryOffset, kSharedBufferSize);
1175 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); 1177 EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
1178 memcpy(shared_memory_address_, kBadSource, kBadSourceSize);
1179 cmd.Init(client_program_id_,
1180 kSharedMemoryId, kSharedMemoryOffset, kBadSourceSize);
1181 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1182 EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
1176 } 1183 }
1177 1184
1178 TEST_F(GLES2DecoderTest, ShaderSourceImmediateAndGetShaderSourceValidArgs) { 1185 TEST_F(GLES2DecoderTest, ShaderSourceImmediateAndGetShaderSourceValidArgs) {
1179 const uint32 kBucketId = 123; 1186 const uint32 kBucketId = 123;
1180 const char kSource[] = "hello"; 1187 const char kSource[] = "hello";
1181 const uint32 kSourceSize = sizeof(kSource) - 1; 1188 const uint32 kSourceSize = sizeof(kSource) - 1;
1182 ShaderSourceImmediate& cmd = *GetImmediateAs<ShaderSourceImmediate>(); 1189 ShaderSourceImmediate& cmd = *GetImmediateAs<ShaderSourceImmediate>();
1183 cmd.Init(client_shader_id_, kSourceSize); 1190 cmd.Init(client_shader_id_, kSourceSize);
1184 memcpy(GetImmediateDataAs<void*>(&cmd), kSource, kSourceSize); 1191 memcpy(GetImmediateDataAs<void*>(&cmd), kSource, kSourceSize);
1185 EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, kSourceSize)); 1192 EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, kSourceSize));
(...skipping 731 matching lines...) Expand 10 before | Expand all | Expand 10 after
1917 memcpy(shared_memory_address_, kName, kNameSize); 1924 memcpy(shared_memory_address_, kName, kNameSize);
1918 BindAttribLocation cmd; 1925 BindAttribLocation cmd;
1919 cmd.Init(client_program_id_, kLocation, kSharedMemoryId, kSharedMemoryOffset, 1926 cmd.Init(client_program_id_, kLocation, kSharedMemoryId, kSharedMemoryOffset,
1920 kNameSize); 1927 kNameSize);
1921 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 1928 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1922 } 1929 }
1923 1930
1924 TEST_F(GLES2DecoderTest, BindAttribLocationInvalidArgs) { 1931 TEST_F(GLES2DecoderTest, BindAttribLocationInvalidArgs) {
1925 const GLint kLocation = 2; 1932 const GLint kLocation = 2;
1926 const char* kName = "testing"; 1933 const char* kName = "testing";
1934 const char* kBadName = "test\aing";
1927 const uint32 kNameSize = strlen(kName); 1935 const uint32 kNameSize = strlen(kName);
1936 const uint32 kBadNameSize = strlen(kBadName);
1928 EXPECT_CALL(*gl_, BindAttribLocation(_, _, _)).Times(0); 1937 EXPECT_CALL(*gl_, BindAttribLocation(_, _, _)).Times(0);
1938 memcpy(shared_memory_address_, kName, kNameSize);
1929 BindAttribLocation cmd; 1939 BindAttribLocation cmd;
1930 cmd.Init(kInvalidClientId, kLocation, 1940 cmd.Init(kInvalidClientId, kLocation,
1931 kSharedMemoryId, kSharedMemoryOffset, kNameSize); 1941 kSharedMemoryId, kSharedMemoryOffset, kNameSize);
1932 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 1942 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1933 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); 1943 EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
1934 cmd.Init(client_program_id_, kLocation, 1944 cmd.Init(client_program_id_, kLocation,
1935 kInvalidSharedMemoryId, kSharedMemoryOffset, kNameSize); 1945 kInvalidSharedMemoryId, kSharedMemoryOffset, kNameSize);
1936 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); 1946 EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
1937 cmd.Init(client_program_id_, kLocation, 1947 cmd.Init(client_program_id_, kLocation,
1938 kSharedMemoryId, kInvalidSharedMemoryOffset, kNameSize); 1948 kSharedMemoryId, kInvalidSharedMemoryOffset, kNameSize);
1939 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); 1949 EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
1940 cmd.Init(client_program_id_, kLocation, 1950 cmd.Init(client_program_id_, kLocation,
1941 kSharedMemoryId, kSharedMemoryOffset, kSharedBufferSize); 1951 kSharedMemoryId, kSharedMemoryOffset, kSharedBufferSize);
1942 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); 1952 EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
1953 memcpy(shared_memory_address_, kBadName, kBadNameSize);
1954 cmd.Init(client_program_id_, kLocation,
1955 kSharedMemoryId, kSharedMemoryOffset, kBadNameSize);
1956 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1957 EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
1943 } 1958 }
1944 1959
1945 TEST_F(GLES2DecoderTest, BindAttribLocationImmediate) { 1960 TEST_F(GLES2DecoderTest, BindAttribLocationImmediate) {
1946 const GLint kLocation = 2; 1961 const GLint kLocation = 2;
1947 const char* kName = "testing"; 1962 const char* kName = "testing";
1948 const uint32 kNameSize = strlen(kName); 1963 const uint32 kNameSize = strlen(kName);
1949 EXPECT_CALL( 1964 EXPECT_CALL(
1950 *gl_, BindAttribLocation(kServiceProgramId, kLocation, StrEq(kName))) 1965 *gl_, BindAttribLocation(kServiceProgramId, kLocation, StrEq(kName)))
1951 .Times(1); 1966 .Times(1);
1952 BindAttribLocationImmediate& cmd = 1967 BindAttribLocationImmediate& cmd =
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
2022 cmd.Init(client_program_id_, 2037 cmd.Init(client_program_id_,
2023 kSharedMemoryId, kNameOffset, 2038 kSharedMemoryId, kNameOffset,
2024 kSharedMemoryId, kSharedMemoryOffset, 2039 kSharedMemoryId, kSharedMemoryOffset,
2025 kNonExistentNameSize); 2040 kNonExistentNameSize);
2026 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 2041 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
2027 EXPECT_EQ(-1, *result); 2042 EXPECT_EQ(-1, *result);
2028 } 2043 }
2029 2044
2030 TEST_F(GLES2DecoderWithShaderTest, GetAttribLocationInvalidArgs) { 2045 TEST_F(GLES2DecoderWithShaderTest, GetAttribLocationInvalidArgs) {
2031 const uint32 kNameSize = strlen(kAttrib2Name); 2046 const uint32 kNameSize = strlen(kAttrib2Name);
2047 const char* kBadName = "foo\abar";
2048 const uint32 kBadNameSize = strlen(kBadName);
2032 typedef GetAttribLocation::Result Result; 2049 typedef GetAttribLocation::Result Result;
2033 Result* result = GetSharedMemoryAs<Result*>(); 2050 Result* result = GetSharedMemoryAs<Result*>();
2034 *result = -1; 2051 *result = -1;
2035 char* name = GetSharedMemoryAsWithOffset<char*>(sizeof(*result)); 2052 char* name = GetSharedMemoryAsWithOffset<char*>(sizeof(*result));
2036 const uint32 kNameOffset = kSharedMemoryOffset + sizeof(*result); 2053 const uint32 kNameOffset = kSharedMemoryOffset + sizeof(*result);
2037 memcpy(name, kAttrib2Name, kNameSize); 2054 memcpy(name, kAttrib2Name, kNameSize);
2038 GetAttribLocation cmd; 2055 GetAttribLocation cmd;
2039 cmd.Init(kInvalidClientId, 2056 cmd.Init(kInvalidClientId,
2040 kSharedMemoryId, kNameOffset, 2057 kSharedMemoryId, kNameOffset,
2041 kSharedMemoryId, kSharedMemoryOffset, 2058 kSharedMemoryId, kSharedMemoryOffset,
(...skipping 25 matching lines...) Expand all
2067 kSharedMemoryId, kInvalidSharedMemoryOffset, 2084 kSharedMemoryId, kInvalidSharedMemoryOffset,
2068 kNameSize); 2085 kNameSize);
2069 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); 2086 EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
2070 EXPECT_EQ(-1, *result); 2087 EXPECT_EQ(-1, *result);
2071 cmd.Init(client_program_id_, 2088 cmd.Init(client_program_id_,
2072 kSharedMemoryId, kNameOffset, 2089 kSharedMemoryId, kNameOffset,
2073 kSharedMemoryId, kSharedMemoryOffset, 2090 kSharedMemoryId, kSharedMemoryOffset,
2074 kSharedBufferSize); 2091 kSharedBufferSize);
2075 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); 2092 EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
2076 EXPECT_EQ(-1, *result); 2093 EXPECT_EQ(-1, *result);
2094 memcpy(name, kBadName, kBadNameSize);
2095 cmd.Init(client_program_id_,
2096 kSharedMemoryId, kNameOffset,
2097 kSharedMemoryId, kSharedMemoryOffset,
2098 kBadNameSize);
2099 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
2100 EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
2077 } 2101 }
2078 2102
2079 TEST_F(GLES2DecoderWithShaderTest, GetAttribLocationImmediate) { 2103 TEST_F(GLES2DecoderWithShaderTest, GetAttribLocationImmediate) {
2080 const uint32 kNameSize = strlen(kAttrib2Name); 2104 const uint32 kNameSize = strlen(kAttrib2Name);
2081 const char* kNonExistentName = "foobar"; 2105 const char* kNonExistentName = "foobar";
2082 const uint32 kNonExistentNameSize = strlen(kNonExistentName); 2106 const uint32 kNonExistentNameSize = strlen(kNonExistentName);
2083 typedef GetAttribLocationImmediate::Result Result; 2107 typedef GetAttribLocationImmediate::Result Result;
2084 Result* result = GetSharedMemoryAs<Result*>(); 2108 Result* result = GetSharedMemoryAs<Result*>();
2085 *result = -1; 2109 *result = -1;
2086 GetAttribLocationImmediate& cmd = 2110 GetAttribLocationImmediate& cmd =
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
2189 cmd.Init(client_program_id_, 2213 cmd.Init(client_program_id_,
2190 kSharedMemoryId, kNameOffset, 2214 kSharedMemoryId, kNameOffset,
2191 kSharedMemoryId, kSharedMemoryOffset, 2215 kSharedMemoryId, kSharedMemoryOffset,
2192 kNonExistentNameSize); 2216 kNonExistentNameSize);
2193 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 2217 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
2194 EXPECT_EQ(-1, *result); 2218 EXPECT_EQ(-1, *result);
2195 } 2219 }
2196 2220
2197 TEST_F(GLES2DecoderWithShaderTest, GetUniformLocationInvalidArgs) { 2221 TEST_F(GLES2DecoderWithShaderTest, GetUniformLocationInvalidArgs) {
2198 const uint32 kNameSize = strlen(kUniform2Name); 2222 const uint32 kNameSize = strlen(kUniform2Name);
2223 const char* kBadName = "foo\abar";
2224 const uint32 kBadNameSize = strlen(kBadName);
2199 typedef GetUniformLocation::Result Result; 2225 typedef GetUniformLocation::Result Result;
2200 Result* result = GetSharedMemoryAs<Result*>(); 2226 Result* result = GetSharedMemoryAs<Result*>();
2201 *result = -1; 2227 *result = -1;
2202 char* name = GetSharedMemoryAsWithOffset<char*>(sizeof(*result)); 2228 char* name = GetSharedMemoryAsWithOffset<char*>(sizeof(*result));
2203 const uint32 kNameOffset = kSharedMemoryOffset + sizeof(*result); 2229 const uint32 kNameOffset = kSharedMemoryOffset + sizeof(*result);
2204 memcpy(name, kUniform2Name, kNameSize); 2230 memcpy(name, kUniform2Name, kNameSize);
2205 GetUniformLocation cmd; 2231 GetUniformLocation cmd;
2206 cmd.Init(kInvalidClientId, 2232 cmd.Init(kInvalidClientId,
2207 kSharedMemoryId, kNameOffset, 2233 kSharedMemoryId, kNameOffset,
2208 kSharedMemoryId, kSharedMemoryOffset, 2234 kSharedMemoryId, kSharedMemoryOffset,
(...skipping 25 matching lines...) Expand all
2234 kSharedMemoryId, kInvalidSharedMemoryOffset, 2260 kSharedMemoryId, kInvalidSharedMemoryOffset,
2235 kNameSize); 2261 kNameSize);
2236 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); 2262 EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
2237 EXPECT_EQ(-1, *result); 2263 EXPECT_EQ(-1, *result);
2238 cmd.Init(client_program_id_, 2264 cmd.Init(client_program_id_,
2239 kSharedMemoryId, kNameOffset, 2265 kSharedMemoryId, kNameOffset,
2240 kSharedMemoryId, kSharedMemoryOffset, 2266 kSharedMemoryId, kSharedMemoryOffset,
2241 kSharedBufferSize); 2267 kSharedBufferSize);
2242 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); 2268 EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
2243 EXPECT_EQ(-1, *result); 2269 EXPECT_EQ(-1, *result);
2270 memcpy(name, kBadName, kBadNameSize);
2271 cmd.Init(client_program_id_,
2272 kSharedMemoryId, kNameOffset,
2273 kSharedMemoryId, kSharedMemoryOffset,
2274 kBadNameSize);
2275 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
2276 EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
2244 } 2277 }
2245 2278
2246 TEST_F(GLES2DecoderWithShaderTest, GetUniformLocationImmediate) { 2279 TEST_F(GLES2DecoderWithShaderTest, GetUniformLocationImmediate) {
2247 const uint32 kNameSize = strlen(kUniform2Name); 2280 const uint32 kNameSize = strlen(kUniform2Name);
2248 const char* kNonExistentName = "foobar"; 2281 const char* kNonExistentName = "foobar";
2249 const uint32 kNonExistentNameSize = strlen(kNonExistentName); 2282 const uint32 kNonExistentNameSize = strlen(kNonExistentName);
2250 typedef GetUniformLocationImmediate::Result Result; 2283 typedef GetUniformLocationImmediate::Result Result;
2251 Result* result = GetSharedMemoryAs<Result*>(); 2284 Result* result = GetSharedMemoryAs<Result*>();
2252 *result = -1; 2285 *result = -1;
2253 GetUniformLocationImmediate& cmd = 2286 GetUniformLocationImmediate& cmd =
(...skipping 2685 matching lines...) Expand 10 before | Expand all | Expand 10 after
4939 // TODO(gman): TexImage2DImmediate 4972 // TODO(gman): TexImage2DImmediate
4940 4973
4941 // TODO(gman): TexSubImage2DImmediate 4974 // TODO(gman): TexSubImage2DImmediate
4942 4975
4943 // TODO(gman): UseProgram 4976 // TODO(gman): UseProgram
4944 4977
4945 // TODO(gman): SwapBuffers 4978 // TODO(gman): SwapBuffers
4946 4979
4947 } // namespace gles2 4980 } // namespace gles2
4948 } // namespace gpu 4981 } // namespace gpu
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/gles2_cmd_decoder.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698