Skip to content

Commit

Permalink
hash-util: make the code work with boost-1.86
Browse files Browse the repository at this point in the history
... where `TEng::digest_type` expands to an array of chars rather than
an array of ints.  This caused each byte in the resulting hash string
to be prepended by 3 zero bytes, which was detected by the CI on macOS:
```
--- /Users/runner/work/csdiff/csdiff/tests/csgrep/0036-csgrep-json-stdout.txt	2024-08-26 16:59:02
+++ -	2024-08-26 17:00:30
@@ -4,7 +4,7 @@
             "checker": "SHELLCHECK_WARNING",
             "language": "shell",
             "tool": "shellcheck",
-            "hash_v1": "b6311c1fdc52c47d4279cd6650af36e6f8299960",
+            "hash_v1": "000000b6000000310000001c0000001f000000dc00000052000000c40000007d0000004200000079000000cd0000006600000050000000af00000036000000e6000000f8000000290000009900000060",
             "key_event_idx": 0,
             "events": [
                 {
```

Also use the `hex_lower` algorithm to optimize out the extra traversal
step to lower the output string.
  • Loading branch information
lzaoral authored and kdudka committed Aug 27, 2024
1 parent 6cd12b1 commit aa5509a
Showing 1 changed file with 5 additions and 6 deletions.
11 changes: 5 additions & 6 deletions src/lib/hash-util.hh
Original file line number Diff line number Diff line change
Expand Up @@ -32,18 +32,17 @@ std::string hexHashStr(const TSrc &src)
eng.process_bytes(src.data(), src.size());

// export the hash as an array of unsigned int
typename TEng::digest_type dst;
using TDst = typename TEng::digest_type;
TDst dst;
eng.get_digest(dst);

// convert the hash to a vector of unsigned int
static const size_t len = sizeof(dst) / sizeof(dst[0]);
const std::vector<unsigned> hash(dst, dst + len);
using TElem = typename std::remove_extent<TDst>::type;
const std::vector<TElem> hash(dst, dst + len);

// convert the hash to a hex string
std::string result;
boost::algorithm::hex(hash.begin(), hash.end(), back_inserter(result));

// convert uppercase letters to lowercase
boost::algorithm::to_lower(result);
boost::algorithm::hex_lower(hash.begin(), hash.end(), back_inserter(result));
return result;
}

0 comments on commit aa5509a

Please sign in to comment.