diff options
| author | Andrew Kelley <superjoe30@gmail.com> | 2018-09-13 11:25:31 -0400 |
|---|---|---|
| committer | Andrew Kelley <superjoe30@gmail.com> | 2018-09-13 11:25:31 -0400 |
| commit | d332311e53a074eef77c61412ee59b5f5fdc3891 (patch) | |
| tree | 7fd08ebf23634ef8fb76b1f59906a852d8faf5a9 | |
| parent | e70c543bc4c097d7c3287feb0f233a13d4dc3829 (diff) | |
| parent | e3f0ba4984f932cd3a9a99504d540b4cd8393364 (diff) | |
| download | zig-d332311e53a074eef77c61412ee59b5f5fdc3891.tar.gz zig-d332311e53a074eef77c61412ee59b5f5fdc3891.zip | |
Merge branch 'kristate-cache-invalidformat-issue1510'
| -rw-r--r-- | src/cache_hash.cpp | 6 | ||||
| -rw-r--r-- | src/util.cpp | 10 | ||||
| -rw-r--r-- | src/util.hpp | 3 |
3 files changed, 15 insertions, 4 deletions
diff --git a/src/cache_hash.cpp b/src/cache_hash.cpp index b302946310..5b1f55686a 100644 --- a/src/cache_hash.cpp +++ b/src/cache_hash.cpp @@ -337,12 +337,12 @@ Error cache_hit(CacheHash *ch, Buf *out_digest) { return ErrorInvalidFormat; } - Optional<Slice<uint8_t>> opt_file_path = SplitIterator_next(&it); - if (!opt_file_path.is_some) { + Slice<uint8_t> file_path = SplitIterator_rest(&it); + if (file_path.len == 0) { os_file_close(ch->manifest_file); return ErrorInvalidFormat; } - Buf *this_path = buf_create_from_slice(opt_file_path.value); + Buf *this_path = buf_create_from_slice(file_path); if (chf->path != nullptr && !buf_eql_buf(this_path, chf->path)) { os_file_close(ch->manifest_file); return ErrorInvalidFormat; diff --git a/src/util.cpp b/src/util.cpp index 060d7f8fb5..192d74e766 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -79,6 +79,16 @@ Optional<Slice<uint8_t>> SplitIterator_next(SplitIterator *self) { } // Ported from std/mem.zig +Slice<uint8_t> SplitIterator_rest(SplitIterator *self) { + // move to beginning of token + size_t index = self->index; + while (index < self->buffer.len && SplitIterator_isSplitByte(self, self->buffer.ptr[index])) { + index += 1; + } + return self->buffer.sliceFrom(index); +} + +// Ported from std/mem.zig SplitIterator memSplit(Slice<uint8_t> buffer, Slice<uint8_t> split_bytes) { return SplitIterator{0, buffer, split_bytes}; } diff --git a/src/util.hpp b/src/util.hpp index f18c369fb5..fa5804efb5 100644 --- a/src/util.hpp +++ b/src/util.hpp @@ -263,7 +263,8 @@ struct SplitIterator { }; bool SplitIterator_isSplitByte(SplitIterator *self, uint8_t byte); -Optional<Slice<uint8_t>> SplitIterator_next(SplitIterator *self); +Optional< Slice<uint8_t> > SplitIterator_next(SplitIterator *self); +Slice<uint8_t> SplitIterator_rest(SplitIterator *self); SplitIterator memSplit(Slice<uint8_t> buffer, Slice<uint8_t> split_bytes); #endif |
