Coverage Report

Created: 2018-09-25 14:53

/work/obj-fuzz/dist/include/mozilla/SnappyFrameUtils.h
Line
Count
Source (jump to first uncovered line)
1
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
3
/* This Source Code Form is subject to the terms of the Mozilla Public
4
 * License, v. 2.0. If a copy of the MPL was not distributed with this
5
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6
7
#ifndef mozilla_SnappyFrameUtils_h__
8
#define mozilla_SnappyFrameUtils_h__
9
10
#include "mozilla/Attributes.h"
11
#include "nsError.h"
12
13
namespace mozilla {
14
namespace detail {
15
16
//
17
// Utility class providing primitives necessary to build streams based
18
// on the snappy compressor.  This essentially abstracts the framing format
19
// defined in:
20
//
21
//  other-licences/snappy/src/framing_format.txt
22
//
23
// NOTE: Currently only the StreamIdentifier and CompressedData chunks are
24
//       supported.
25
//
26
class SnappyFrameUtils
27
{
28
public:
29
  enum ChunkType
30
  {
31
    Unknown,
32
    StreamIdentifier,
33
    CompressedData,
34
    UncompressedData,
35
    Padding,
36
    Reserved,
37
    ChunkTypeCount
38
  };
39
40
  static const size_t kChunkTypeLength = 1;
41
  static const size_t kChunkLengthLength = 3;
42
  static const size_t kHeaderLength = kChunkTypeLength + kChunkLengthLength;
43
  static const size_t kStreamIdentifierDataLength = 6;
44
  static const size_t kCRCLength = 4;
45
46
  static nsresult
47
  WriteStreamIdentifier(char* aDest, size_t aDestLength,
48
                        size_t* aBytesWrittenOut);
49
50
  static nsresult
51
  WriteCompressedData(char* aDest, size_t aDestLength,
52
                      const char* aData, size_t aDataLength,
53
                      size_t* aBytesWrittenOut);
54
55
  static nsresult
56
  ParseHeader(const char* aSource, size_t aSourceLength, ChunkType* aTypeOut,
57
              size_t* aDataLengthOut);
58
59
  static nsresult
60
  ParseData(char* aDest, size_t aDestLength,
61
            ChunkType aType, const char* aData, size_t aDataLength,
62
            size_t* aBytesWrittenOut, size_t* aBytesReadOut);
63
64
  static nsresult
65
  ParseStreamIdentifier(char* aDest, size_t aDestLength,
66
                        const char* aData, size_t aDataLength,
67
                        size_t* aBytesWrittenOut, size_t* aBytesReadOut);
68
69
  static nsresult
70
  ParseCompressedData(char* aDest, size_t aDestLength,
71
                      const char* aData, size_t aDataLength,
72
                      size_t* aBytesWrittenOut, size_t* aBytesReadOut);
73
74
  static size_t
75
  MaxCompressedBufferLength(size_t aSourceLength);
76
77
protected:
78
0
  SnappyFrameUtils() { }
79
0
  virtual ~SnappyFrameUtils() { }
80
};
81
82
} // namespace detail
83
} // namespace mozilla
84
85
#endif // mozilla_SnappyFrameUtils_h__