summaryrefslogtreecommitdiff
path: root/mangle.c
diff options
context:
space:
mode:
authorRobert Swiecki <robert@swiecki.net>2017-11-14 00:54:39 +0100
committerRobert Swiecki <robert@swiecki.net>2017-11-14 00:54:39 +0100
commitd6aaca78ade665e0c3f9a8e62fe285afe4175fb3 (patch)
tree8539b2e5ba62254e2593f3d4cdf81fa93fc466aa /mangle.c
parentd440cbbf15f415ac6ac0628798f5e78139b0ad5a (diff)
downloadhonggfuzz-d6aaca78ade665e0c3f9a8e62fe285afe4175fb3.tar.gz
mangle: simply add/sub logic
Diffstat (limited to 'mangle.c')
-rw-r--r--mangle.c29
1 files changed, 23 insertions, 6 deletions
diff --git a/mangle.c b/mangle.c
index 8460a5f7..cf730a98 100644
--- a/mangle.c
+++ b/mangle.c
@@ -399,8 +399,8 @@ static void mangle_Random(run_t* run) {
static void mangle_AddSub(run_t* run) {
size_t off = util_rndGet(0, run->dynamicFileSz - 1);
- /* 1,2,4 */
- uint64_t varLen = 1ULL << util_rndGet(0, 2);
+ /* 1,2,4,8 */
+ uint64_t varLen = 1U << util_rndGet(0, 3);
if ((run->dynamicFileSz - off) < varLen) {
varLen = 1;
}
@@ -415,8 +415,9 @@ static void mangle_AddSub(run_t* run) {
break;
}
case 2: {
- int16_t val = *((uint16_t*)&run->dynamicFile[off]);
- if (util_rndGet(0, 1) == 0) {
+ int16_t val;
+ memcpy(&val, &run->dynamicFile[off], sizeof(val));
+ if (util_rnd64() & 0x1) {
val += delta;
} else {
/* Foreign endianess */
@@ -429,8 +430,9 @@ static void mangle_AddSub(run_t* run) {
break;
}
case 4: {
- int32_t val = *((uint32_t*)&run->dynamicFile[off]);
- if (util_rndGet(0, 1) == 0) {
+ int32_t val;
+ memcpy(&val, &run->dynamicFile[off], sizeof(val));
+ if (util_rnd64() & 0x1) {
val += delta;
} else {
/* Foreign endianess */
@@ -442,6 +444,21 @@ static void mangle_AddSub(run_t* run) {
return;
break;
}
+ case 8: {
+ int64_t val;
+ memcpy(&val, &run->dynamicFile[off], sizeof(val));
+ if (util_rnd64() & 0x1) {
+ val += delta;
+ } else {
+ /* Foreign endianess */
+ val = __builtin_bswap64(val);
+ val += delta;
+ val = __builtin_bswap64(val);
+ }
+ mangle_Overwrite(run, (uint8_t*)&val, off, varLen);
+ return;
+ break;
+ }
default: {
LOG_F("Unknown variable length size: %" PRIu64, varLen);
break;