Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 2 additions & 0 deletions .github/workflows/sdk.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ on:
- '.github/workflows/sdk.yml'
- 'sdk/**'
- 'scripts/check-sdk.py'
schedule:
- cron: "0 2 * * SUN"

permissions:
contents: read
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
*.a
*.o
/lzma*.7z
/*_fuzzer
/*_seed_corpus.zip
6 changes: 5 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ C_SOURCES = \
$(SDK_ROOT)/C/Delta.c \
$(SDK_ROOT)/C/DllSecur.c \
$(SDK_ROOT)/C/LzFind.c \
$(SDK_ROOT)/C/LzFindMt.c \
$(SDK_ROOT)/C/LzFindOpt.c \
$(SDK_ROOT)/C/Lzma2Dec.c \
$(SDK_ROOT)/C/Lzma2DecMt.c \
$(SDK_ROOT)/C/Lzma2Enc.c \
Expand All @@ -38,7 +40,9 @@ C_SOURCES = \
$(SDK_ROOT)/C/Ppmd7Dec.c \
$(SDK_ROOT)/C/Ppmd7Enc.c \
$(SDK_ROOT)/C/Sha256.c \
$(SDK_ROOT)/C/Sha256Opt.c \
$(SDK_ROOT)/C/Sort.c \
$(SDK_ROOT)/C/Threads.c \
$(SDK_ROOT)/C/Xz.c \
$(SDK_ROOT)/C/XzCrc64.c \
$(SDK_ROOT)/C/XzCrc64Opt.c \
Expand Down Expand Up @@ -85,7 +89,7 @@ clean:
$(CC) $(CFLAGS) $(SDK_FLAGS) $(INCLUDES) $(COMMON_FLAGS) -c -o $@ $<

%.o: %.cc
$(CXX) $(CXXFLAGS) $(INCLUDES) $(COMMON_FLAGS) -c -o $@ $<
$(CXX) $(CXXFLAGS) $(INCLUDES) $(COMMON_FLAGS) -std=c++11 -c -o $@ $<

%_seed_corpus.zip:
zip -r $@ $(CORPUS_ROOT)/$*
Expand Down
26 changes: 13 additions & 13 deletions common-buffer.h
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ OutputBuffer::~OutputBuffer() {
// static
size_t OutputBuffer::_Write(const ISeqOutStream *p, const void *data,
size_t size) {
OutputBufferStream *stream = CONTAINER_FROM_VTBL(p, OutputBufferStream, vt);
OutputBufferStream *stream = Z7_CONTAINER_FROM_VTBL(p, OutputBufferStream, vt);
return stream->buffer->Write(data, size);
}

Expand Down Expand Up @@ -128,7 +128,7 @@ OutputByteBuffer::~OutputByteBuffer() {

// static
void OutputByteBuffer::_Write(const IByteOut *p, Byte b) {
ByteOutStream *stream = CONTAINER_FROM_VTBL(p, ByteOutStream, vt);
ByteOutStream *stream = Z7_CONTAINER_FROM_VTBL(p, ByteOutStream, vt);
stream->buffer->Write(b);
}

Expand Down Expand Up @@ -179,7 +179,7 @@ InputBuffer::InputBuffer(const uint8_t *data, size_t size)

// static
SRes InputBuffer::_Read(const ISeqInStream *p, void *data, size_t *size) {
InputBufferStream *stream = CONTAINER_FROM_VTBL(p, InputBufferStream, vt);
InputBufferStream *stream = Z7_CONTAINER_FROM_VTBL(p, InputBufferStream, vt);
return stream->buffer->Read(data, size);
}

Expand Down Expand Up @@ -224,7 +224,7 @@ InputByteBuffer::InputByteBuffer(const uint8_t *data, size_t size)

// static
Byte InputByteBuffer::_Read(const IByteIn *p) {
ByteInStream *stream = CONTAINER_FROM_VTBL(p, ByteInStream, vt);
ByteInStream *stream = Z7_CONTAINER_FROM_VTBL(p, ByteInStream, vt);
return stream->buffer->Read();
}

Expand Down Expand Up @@ -259,8 +259,8 @@ class InputLookBuffer {

InputLookBufferStream stream_;
const uint8_t *data_;
size_t size_;
size_t position_ = 0;
Int64 size_;
Int64 position_ = 0;
};

InputLookBuffer::InputLookBuffer(const uint8_t *data, size_t size)
Expand All @@ -276,7 +276,7 @@ InputLookBuffer::InputLookBuffer(const uint8_t *data, size_t size)
SRes InputLookBuffer::_Look(const ILookInStream *p, const void **data,
size_t *size) {
InputLookBufferStream *stream =
CONTAINER_FROM_VTBL(p, InputLookBufferStream, vt);
Z7_CONTAINER_FROM_VTBL(p, InputLookBufferStream, vt);
return stream->buffer->Look(data, size);
}

Expand All @@ -292,7 +292,7 @@ SRes InputLookBuffer::Look(const void **data, size_t *size) {
// static
SRes InputLookBuffer::_Skip(const ILookInStream *p, size_t offset) {
InputLookBufferStream *stream =
CONTAINER_FROM_VTBL(p, InputLookBufferStream, vt);
Z7_CONTAINER_FROM_VTBL(p, InputLookBufferStream, vt);
return stream->buffer->Skip(offset);
}

Expand All @@ -308,7 +308,7 @@ SRes InputLookBuffer::Skip(size_t offset) {
// static
SRes InputLookBuffer::_Read(const ILookInStream *p, void *data, size_t *size) {
InputLookBufferStream *stream =
CONTAINER_FROM_VTBL(p, InputLookBufferStream, vt);
Z7_CONTAINER_FROM_VTBL(p, InputLookBufferStream, vt);
return stream->buffer->Read(data, size);
}

Expand All @@ -328,17 +328,17 @@ SRes InputLookBuffer::Read(void *data, size_t *size) {
SRes InputLookBuffer::_Seek(const ILookInStream *p, Int64 *pos,
ESzSeek origin) {
InputLookBufferStream *stream =
CONTAINER_FROM_VTBL(p, InputLookBufferStream, vt);
Z7_CONTAINER_FROM_VTBL(p, InputLookBufferStream, vt);
return stream->buffer->Seek(pos, origin);
}

SRes InputLookBuffer::Seek(Int64 *pos, ESzSeek origin) {
switch (origin) {
case SZ_SEEK_SET:
if (*pos > size_) {
*pos = size_;
} else if (*pos < 0) {
if (*pos < 0) {
*pos = 0;
} else if (*pos > size_) {
*pos = size_;
}
position_ = *pos;
break;
Expand Down
45 changes: 30 additions & 15 deletions filters_fuzzer.cc
Original file line number Diff line number Diff line change
Expand Up @@ -95,10 +95,25 @@ class BraArmFuzzer : public EncodeDecodeFuzzer {
protected:
void RunFilter(uint8_t *data, size_t size) override {
// Encode data.
ARM_Convert(data, size, kIp, 1);
z7_BranchConv_ARM_Enc(data, size, kIp);

// Decode data.
ARM_Convert(data, size, kIp, 0);
z7_BranchConv_ARM_Dec(data, size, kIp);
}
};

class BraArm64Fuzzer : public EncodeDecodeFuzzer {
public:
BraArm64Fuzzer(const uint8_t *data, size_t size)
: EncodeDecodeFuzzer(data, size) {}

protected:
void RunFilter(uint8_t *data, size_t size) override {
// Encode data.
z7_BranchConv_ARM64_Enc(data, size, kIp);

// Decode data.
z7_BranchConv_ARM64_Dec(data, size, kIp);
}
};

Expand All @@ -110,10 +125,10 @@ class BraArmtFuzzer : public EncodeDecodeFuzzer {
protected:
void RunFilter(uint8_t *data, size_t size) override {
// Encode data.
ARMT_Convert(data, size, kIp, 1);
z7_BranchConv_ARMT_Enc(data, size, kIp);

// Decode data.
ARMT_Convert(data, size, kIp, 0);
z7_BranchConv_ARMT_Dec(data, size, kIp);
}
};

Expand All @@ -125,10 +140,10 @@ class BraIa64Fuzzer : public EncodeDecodeFuzzer {
protected:
void RunFilter(uint8_t *data, size_t size) override {
// Encode data.
IA64_Convert(data, size, kIp, 1);
z7_BranchConv_IA64_Enc(data, size, kIp);

// Decode data.
IA64_Convert(data, size, kIp, 0);
z7_BranchConv_IA64_Dec(data, size, kIp);
}
};

Expand All @@ -140,10 +155,10 @@ class BraPpcFuzzer : public EncodeDecodeFuzzer {
protected:
void RunFilter(uint8_t *data, size_t size) override {
// Encode data.
PPC_Convert(data, size, kIp, 1);
z7_BranchConv_PPC_Enc(data, size, kIp);

// Decode data.
PPC_Convert(data, size, kIp, 0);
z7_BranchConv_PPC_Dec(data, size, kIp);
}
};

Expand All @@ -155,10 +170,10 @@ class BraSparcFuzzer : public EncodeDecodeFuzzer {
protected:
void RunFilter(uint8_t *data, size_t size) override {
// Encode data.
SPARC_Convert(data, size, kIp, 1);
z7_BranchConv_SPARC_Enc(data, size, kIp);

// Decode data.
SPARC_Convert(data, size, kIp, 0);
z7_BranchConv_SPARC_Dec(data, size, kIp);
}
};

Expand All @@ -169,14 +184,13 @@ class BraX86Fuzzer : public EncodeDecodeFuzzer {

protected:
void RunFilter(uint8_t *data, size_t size) override {
UInt32 state;
UInt32 encState = Z7_BRANCH_CONV_ST_X86_STATE_INIT_VAL;
// Encode data.
x86_Convert_Init(state);
x86_Convert(data, size, kIp, &state, 1);
z7_BranchConvSt_X86_Enc(data, size, kIp, &encState);

// Decode data.
x86_Convert_Init(state);
x86_Convert(data, size, kIp, &state, 0);
UInt32 decState = Z7_BRANCH_CONV_ST_X86_STATE_INIT_VAL;
z7_BranchConvSt_X86_Dec(data, size, kIp, &decState);
}
};

Expand Down Expand Up @@ -275,6 +289,7 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
FilterFuzzer *fuzzers[] = {
new AesFuzzer(data, size),
new BraArmFuzzer(data, size),
new BraArm64Fuzzer(data, size),
new BraArmtFuzzer(data, size),
new BraIa64Fuzzer(data, size),
new BraPpcFuzzer(data, size),
Expand Down
16 changes: 8 additions & 8 deletions ppmdenc_fuzzer.cc
Original file line number Diff line number Diff line change
Expand Up @@ -47,13 +47,14 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
Ppmd7_Init(&p_enc, order);

OutputByteBuffer out_buffer;
CPpmd7z_RangeEnc enc;
Ppmd7z_RangeEnc_Init(&enc);
enc.Stream = out_buffer.stream();
CPpmd7 enc;
Ppmd7z_Init_RangeEnc(&enc);

p_enc.rc.enc.Stream = out_buffer.stream();
for (size_t i = 0; i < size; ++i) {
Ppmd7_EncodeSymbol(&p_enc, &enc, data[i]);
Ppmd7z_EncodeSymbols(&p_enc, data+i, data+i+1);
}
Ppmd7z_RangeEnc_FlushData(&enc);
Ppmd7z_Flush_RangeEnc(&enc);
Ppmd7_Free(&p_enc, &CommonAlloc);

{
Expand All @@ -63,13 +64,12 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
Ppmd7_Construct(&p_dec);
assert(Ppmd7_Alloc(&p_dec, memsize, &CommonAlloc));
Ppmd7_Init(&p_dec, order);
CPpmd7z_RangeDec dec;
Ppmd7z_RangeDec_CreateVTable(&dec);
CPpmd7_RangeDec dec;
dec.Stream = in_buffer.stream();
assert(Ppmd7z_RangeDec_Init(&dec));

for (size_t i = 0; i < size; ++i) {
int sym = Ppmd7_DecodeSymbol(&p_dec, &dec.vt);
int sym = Ppmd7z_DecodeSymbol(&p_dec);
assert(sym >= 0);
assert(sym == data[i]);
}
Expand Down
Loading