blob: 0a9e2536d4f8b2a34ef3ef730f17738cca128070 [file] [log] [blame]
commit-bot@chromium.orgc0b7e102013-10-23 17:06:21 +00001/*
2 * Copyright 2013 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#ifndef SkValidatingReadBuffer_DEFINED
9#define SkValidatingReadBuffer_DEFINED
10
11#include "SkRefCnt.h"
12#include "SkBitmapHeap.h"
commit-bot@chromium.org8b0e8ac2014-01-30 18:58:24 +000013#include "SkReadBuffer.h"
14#include "SkWriteBuffer.h"
commit-bot@chromium.orgc0b7e102013-10-23 17:06:21 +000015#include "SkPath.h"
16#include "SkPicture.h"
17#include "SkReader32.h"
18
19class SkBitmap;
20
commit-bot@chromium.org8b0e8ac2014-01-30 18:58:24 +000021class SkValidatingReadBuffer : public SkReadBuffer {
commit-bot@chromium.orgc0b7e102013-10-23 17:06:21 +000022public:
23 SkValidatingReadBuffer(const void* data, size_t size);
24 virtual ~SkValidatingReadBuffer();
25
26 const void* skip(size_t size);
27
28 // primitives
29 virtual bool readBool() SK_OVERRIDE;
30 virtual SkColor readColor() SK_OVERRIDE;
31 virtual SkFixed readFixed() SK_OVERRIDE;
32 virtual int32_t readInt() SK_OVERRIDE;
33 virtual SkScalar readScalar() SK_OVERRIDE;
34 virtual uint32_t readUInt() SK_OVERRIDE;
35 virtual int32_t read32() SK_OVERRIDE;
36
37 // strings -- the caller is responsible for freeing the string contents
38 virtual void readString(SkString* string) SK_OVERRIDE;
39 virtual void* readEncodedString(size_t* length, SkPaint::TextEncoding encoding) SK_OVERRIDE;
40
41 // common data structures
42 virtual SkFlattenable* readFlattenable(SkFlattenable::Type type) SK_OVERRIDE;
commit-bot@chromium.org83f23d82014-05-22 12:27:41 +000043 virtual void skipFlattenable() SK_OVERRIDE;
commit-bot@chromium.orgc0b7e102013-10-23 17:06:21 +000044 virtual void readPoint(SkPoint* point) SK_OVERRIDE;
45 virtual void readMatrix(SkMatrix* matrix) SK_OVERRIDE;
46 virtual void readIRect(SkIRect* rect) SK_OVERRIDE;
47 virtual void readRect(SkRect* rect) SK_OVERRIDE;
48 virtual void readRegion(SkRegion* region) SK_OVERRIDE;
49 virtual void readPath(SkPath* path) SK_OVERRIDE;
50
51 // binary data and arrays
commit-bot@chromium.org02512882013-10-31 18:37:50 +000052 virtual bool readByteArray(void* value, size_t size) SK_OVERRIDE;
53 virtual bool readColorArray(SkColor* colors, size_t size) SK_OVERRIDE;
54 virtual bool readIntArray(int32_t* values, size_t size) SK_OVERRIDE;
55 virtual bool readPointArray(SkPoint* points, size_t size) SK_OVERRIDE;
56 virtual bool readScalarArray(SkScalar* values, size_t size) SK_OVERRIDE;
commit-bot@chromium.orgc0b7e102013-10-23 17:06:21 +000057
58 // helpers to get info about arrays and binary data
59 virtual uint32_t getArrayCount() SK_OVERRIDE;
60
commit-bot@chromium.orgc0b7e102013-10-23 17:06:21 +000061 // TODO: Implement this (securely) when needed
commit-bot@chromium.org02512882013-10-31 18:37:50 +000062 virtual SkTypeface* readTypeface() SK_OVERRIDE;
commit-bot@chromium.orgc0b7e102013-10-23 17:06:21 +000063
commit-bot@chromium.org8f457e32013-11-08 19:22:57 +000064 virtual bool validate(bool isValid) SK_OVERRIDE;
commit-bot@chromium.orgc2e9db32013-12-06 20:14:46 +000065 virtual bool isValid() const SK_OVERRIDE;
commit-bot@chromium.orgc0b7e102013-10-23 17:06:21 +000066
commit-bot@chromium.orgef74fa12013-12-17 20:49:46 +000067 virtual bool validateAvailable(size_t size) SK_OVERRIDE;
68
commit-bot@chromium.orgc0b7e102013-10-23 17:06:21 +000069private:
commit-bot@chromium.org02512882013-10-31 18:37:50 +000070 bool readArray(void* value, size_t size, size_t elementSize);
71
commit-bot@chromium.orgc0b7e102013-10-23 17:06:21 +000072 void setMemory(const void* data, size_t size);
73
74 static bool IsPtrAlign4(const void* ptr) {
75 return SkIsAlign4((uintptr_t)ptr);
76 }
77
commit-bot@chromium.orgc0b7e102013-10-23 17:06:21 +000078 bool fError;
79
commit-bot@chromium.org8b0e8ac2014-01-30 18:58:24 +000080 typedef SkReadBuffer INHERITED;
commit-bot@chromium.orgc0b7e102013-10-23 17:06:21 +000081};
82
83#endif // SkValidatingReadBuffer_DEFINED