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

Side by Side Diff: Source/modules/crypto/NormalizeAlgorithm.cpp

Issue 23361019: WebCrypto: properly normalize optional numeric parameters. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Replace contains() with a different get() method Created 7 years, 4 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 | « Source/bindings/v8/Dictionary.cpp ('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 /* 1 /*
2 * Copyright (C) 2013 Google Inc. All rights reserved. 2 * Copyright (C) 2013 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after
228 228
229 bool getUint8Array(const Dictionary& raw, const char* propertyName, RefPtr<Uint8 Array>& array, const ExceptionContext& context, ExceptionState& es) 229 bool getUint8Array(const Dictionary& raw, const char* propertyName, RefPtr<Uint8 Array>& array, const ExceptionContext& context, ExceptionState& es)
230 { 230 {
231 if (!raw.get(propertyName, array) || !array) { 231 if (!raw.get(propertyName, array) || !array) {
232 es.throwTypeError(context.toString(propertyName, "Missing or not a Uint8 Array")); 232 es.throwTypeError(context.toString(propertyName, "Missing or not a Uint8 Array"));
233 return false; 233 return false;
234 } 234 }
235 return true; 235 return true;
236 } 236 }
237 237
238 bool getInteger(const Dictionary& raw, const char* propertyName, double& value, double minValue, double maxValue, const ExceptionContext& context, ExceptionStat e& es) 238 // Gets an integer according to WebIDL's [EnforceRange].
239 bool getOptionalInteger(const Dictionary& raw, const char* propertyName, bool& h asProperty, double& value, double minValue, double maxValue, const ExceptionCont ext& context, ExceptionState& es)
239 { 240 {
240 double number; 241 double number;
241 if (!raw.get(propertyName, number)) { 242 bool ok = raw.get(propertyName, number, hasProperty);
242 es.throwTypeError(context.toString(propertyName, "Missing or not a numbe r"));
243 return false;
244 }
245 243
246 // Convert to an integer according to WebIDL's [EnforceRange]. 244 if (!hasProperty)
247 if (std::isinf(number) || std::isnan(number)) { 245 return true;
248 es.throwTypeError(context.toString(propertyName, "Outside of numeric ran ge")); 246
247 if (!ok || std::isnan(number)) {
248 es.throwTypeError(context.toString(propertyName, "Is not a number"));
249 return false; 249 return false;
250 } 250 }
251 251
252 number = trunc(number); 252 number = trunc(number);
253 253
254 if (number < minValue || number > maxValue) { 254 if (std::isinf(number) || number < minValue || number > maxValue) {
255 es.throwTypeError(context.toString(propertyName, "Outside of numeric ran ge")); 255 es.throwTypeError(context.toString(propertyName, "Outside of numeric ran ge"));
256 return false; 256 return false;
257 } 257 }
258 258
259 value = number; 259 value = number;
260 return true; 260 return true;
261 } 261 }
262 262
263 bool getOptionalInteger(const Dictionary& raw, const char* propertyName, bool& h asValue, double& value, double minValue, double maxValue, const ExceptionContext & context, ExceptionState& es) 263 bool getInteger(const Dictionary& raw, const char* propertyName, double& value, double minValue, double maxValue, const ExceptionContext& context, ExceptionStat e& es)
264 { 264 {
265 double number; 265 bool hasProperty;
266 if (!raw.get(propertyName, number)) { 266 if (!getOptionalInteger(raw, propertyName, hasProperty, value, minValue, max Value, context, es))
267 // FIXME: If the property exists but is NOT a number, should fail. 267 return false;
268 hasValue = false; 268
269 return true; 269 if (!hasProperty) {
270 es.throwTypeError(context.toString(propertyName, "Missing required prope rty"));
271 return false;
270 } 272 }
271 273
272 hasValue = true; 274 return true;
273 return getInteger(raw, propertyName, value, minValue, maxValue, context, es) ;
274 } 275 }
275 276
276 bool getUint32(const Dictionary& raw, const char* propertyName, uint32_t& value, const ExceptionContext& context, ExceptionState& es) 277 bool getUint32(const Dictionary& raw, const char* propertyName, uint32_t& value, const ExceptionContext& context, ExceptionState& es)
277 { 278 {
278 double number; 279 double number;
279 if (!getInteger(raw, propertyName, number, 0, 0xFFFFFFFF, context, es)) 280 if (!getInteger(raw, propertyName, number, 0, 0xFFFFFFFF, context, es))
280 return false; 281 return false;
281 value = number; 282 value = number;
282 return true; 283 return true;
283 } 284 }
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
350 return true; 351 return true;
351 } 352 }
352 353
353 bool parseHmacKeyParams(const Dictionary& raw, OwnPtr<WebKit::WebCryptoAlgorithm Params>& params, const ExceptionContext& context, ExceptionState& es) 354 bool parseHmacKeyParams(const Dictionary& raw, OwnPtr<WebKit::WebCryptoAlgorithm Params>& params, const ExceptionContext& context, ExceptionState& es)
354 { 355 {
355 WebKit::WebCryptoAlgorithm hash; 356 WebKit::WebCryptoAlgorithm hash;
356 if (!parseHash(raw, hash, context, es)) 357 if (!parseHash(raw, hash, context, es))
357 return false; 358 return false;
358 359
359 bool hasLength; 360 bool hasLength;
360 uint32_t length; 361 uint32_t length = 0;
361 if (!getOptionalUint32(raw, "length", hasLength, length, context, es)) 362 if (!getOptionalUint32(raw, "length", hasLength, length, context, es))
362 return false; 363 return false;
363 364
364 params = adoptPtr(new WebKit::WebCryptoHmacKeyParams(hash, hasLength, length )); 365 params = adoptPtr(new WebKit::WebCryptoHmacKeyParams(hash, hasLength, length ));
365 return true; 366 return true;
366 } 367 }
367 368
368 bool parseRsaSsaParams(const Dictionary& raw, OwnPtr<WebKit::WebCryptoAlgorithmP arams>& params, const ExceptionContext& context, ExceptionState& es) 369 bool parseRsaSsaParams(const Dictionary& raw, OwnPtr<WebKit::WebCryptoAlgorithmP arams>& params, const ExceptionContext& context, ExceptionState& es)
369 { 370 {
370 WebKit::WebCryptoAlgorithm hash; 371 WebKit::WebCryptoAlgorithm hash;
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
466 } 467 }
467 468
468 } // namespace 469 } // namespace
469 470
470 bool normalizeAlgorithm(const Dictionary& raw, AlgorithmOperation op, WebKit::We bCryptoAlgorithm& algorithm, ExceptionState& es) 471 bool normalizeAlgorithm(const Dictionary& raw, AlgorithmOperation op, WebKit::We bCryptoAlgorithm& algorithm, ExceptionState& es)
471 { 472 {
472 return normalizeAlgorithm(raw, op, algorithm, ExceptionContext(), es); 473 return normalizeAlgorithm(raw, op, algorithm, ExceptionContext(), es);
473 } 474 }
474 475
475 } // namespace WebCore 476 } // namespace WebCore
OLDNEW
« no previous file with comments | « Source/bindings/v8/Dictionary.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698