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

Side by Side Diff: src/wasm/decoder.h

Issue 2410913002: [wasm] Fix decoder for null data (Closed)
Patch Set: Created 4 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
« no previous file with comments | « no previous file | test/unittests/wasm/decoder-unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 the V8 project authors. All rights reserved. 1 // Copyright 2015 the V8 project 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 #ifndef V8_WASM_DECODER_H_ 5 #ifndef V8_WASM_DECODER_H_
6 #define V8_WASM_DECODER_H_ 6 #define V8_WASM_DECODER_H_
7 7
8 #include <memory> 8 #include <memory>
9 9
10 #include "src/base/compiler-specific.h" 10 #include "src/base/compiler-specific.h"
(...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after
246 } 246 }
247 TRACE("<end>\n"); 247 TRACE("<end>\n");
248 pc_ = limit_; 248 pc_ = limit_;
249 return t; 249 return t;
250 } 250 }
251 251
252 // Converts the given value to a {Result}, copying the error if necessary. 252 // Converts the given value to a {Result}, copying the error if necessary.
253 template <typename T> 253 template <typename T>
254 Result<T> toResult(T val) { 254 Result<T> toResult(T val) {
255 Result<T> result; 255 Result<T> result;
256 if (error_pc_) { 256 if (failed()) {
257 TRACE("Result error: %s\n", error_msg_.get()); 257 TRACE("Result error: %s\n", error_msg_.get());
258 result.error_code = kError; 258 result.error_code = kError;
259 result.start = start_; 259 result.start = start_;
260 result.error_pc = error_pc_; 260 result.error_pc = error_pc_;
261 result.error_pt = error_pt_; 261 result.error_pt = error_pt_;
262 // transfer ownership of the error to the result. 262 // transfer ownership of the error to the result.
263 result.error_msg.reset(error_msg_.release()); 263 result.error_msg.reset(error_msg_.release());
264 } else { 264 } else {
265 result.error_code = kSuccess; 265 result.error_code = kSuccess;
266 } 266 }
267 result.val = std::move(val); 267 result.val = std::move(val);
268 return result; 268 return result;
269 } 269 }
270 270
271 // Resets the boundaries of this decoder. 271 // Resets the boundaries of this decoder.
272 void Reset(const byte* start, const byte* end) { 272 void Reset(const byte* start, const byte* end) {
273 start_ = start; 273 start_ = start;
274 pc_ = start; 274 pc_ = start;
275 limit_ = end; 275 limit_ = end;
276 end_ = end; 276 end_ = end;
277 error_pc_ = nullptr; 277 error_pc_ = nullptr;
278 error_pt_ = nullptr; 278 error_pt_ = nullptr;
279 error_msg_.reset(); 279 error_msg_.reset();
280 } 280 }
281 281
282 bool ok() const { return error_pc_ == nullptr; } 282 bool ok() const { return error_msg_ == nullptr; }
283 bool failed() const { return !!error_msg_; } 283 bool failed() const { return !ok(); }
284 bool more() const { return pc_ < limit_; } 284 bool more() const { return pc_ < limit_; }
285 285
286 const byte* start() { return start_; } 286 const byte* start() { return start_; }
287 const byte* pc() { return pc_; } 287 const byte* pc() { return pc_; }
288 uint32_t pc_offset() { return static_cast<uint32_t>(pc_ - start_); } 288 uint32_t pc_offset() { return static_cast<uint32_t>(pc_ - start_); }
289 289
290 protected: 290 protected:
291 const byte* start_; 291 const byte* start_;
292 const byte* pc_; 292 const byte* pc_;
293 const byte* limit_; 293 const byte* limit_;
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
391 return traceOffEnd<uint32_t>(); 391 return traceOffEnd<uint32_t>();
392 } 392 }
393 }; 393 };
394 394
395 #undef TRACE 395 #undef TRACE
396 } // namespace wasm 396 } // namespace wasm
397 } // namespace internal 397 } // namespace internal
398 } // namespace v8 398 } // namespace v8
399 399
400 #endif // V8_WASM_DECODER_H_ 400 #endif // V8_WASM_DECODER_H_
OLDNEW
« no previous file with comments | « no previous file | test/unittests/wasm/decoder-unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698