Skip to content
Snippets Groups Projects
Commit 2f25f372 authored by Rob Swindell's avatar Rob Swindell :speech_balloon:
Browse files

Fix unaligned memory accesses as reported by ASan

e.g. runtime error: store to misaligned address 0x7ffec33195e3 for type
'short int', which requires 2 byte alignment

These aren't a problem for x86, but could be a problem for some other CPU
architectures that don't support unaligned access. I didn't use memcpy() to
resolve this (though that would've worked) to make this change endian agnostic.
parent fc5092db
No related branches found
No related tags found
No related merge requests found
......@@ -565,8 +565,8 @@ uchar* arstr(ushort* count, const char* str, scfg_t* cfg, uchar* ar_buf)
p=strchr(str+i,':');
if(p)
n+=atoi(p+1);
*((short *)(ar+j))=n;
j+=2;
ar[j++] = n & 0xff;
ar[j++] = (n >> 8) & 0xff;
while(IS_DIGIT(str[i+1]) || str[i+1]==':') i++;
continue;
}
......@@ -606,16 +606,16 @@ uchar* arstr(ushort* count, const char* str, scfg_t* cfg, uchar* ar_buf)
case AR_DLS:
case AR_DLK:
case AR_DLM:
*((short *)(ar+j))=n;
j+=sizeof(short);
ar[j++] = n & 0xff;
ar[j++] = (n >> 8) & 0xff;
break;
case AR_GROUP:
case AR_LIB:
case AR_DIR:
case AR_SUB:
if(n) n--; /* convert to 0 base */
*((short *)(ar+j))=n;
j+=2;
if(n > 0) n--; /* convert to 0 base */
ar[j++] = n & 0xff;
ar[j++] = (n >> 8) & 0xff;
break;
default: /* invalid numeric AR type */
j--;
......@@ -663,8 +663,8 @@ uchar* arstr(ushort* count, const char* str, scfg_t* cfg, uchar* ar_buf)
if(!strnicmp(str+i,cfg->sub[n]->code,strlen(cfg->sub[n]->code)))
break;
if(n<(uint)cfg->total_subs) {
*((short *)(ar+j))=n;
j+=2;
ar[j++] = n & 0xff;
ar[j++] = (n >> 8) & 0xff;
}
else /* Unknown sub-board */
j--;
......@@ -675,8 +675,8 @@ uchar* arstr(ushort* count, const char* str, scfg_t* cfg, uchar* ar_buf)
if(!strnicmp(str+i,cfg->dir[n]->code,strlen(cfg->dir[n]->code)))
break;
if(n<(uint)cfg->total_dirs) {
*((short *)(ar+j))=n;
j+=2;
ar[j++] = n & 0xff;
ar[j++] = (n >> 8) & 0xff;
}
else /* Unknown directory */
j--;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment