Skip to content

Commit afa4a69

Browse files
committed
Fix endian error in geo filter
1 parent 5986db6 commit afa4a69

2 files changed

Lines changed: 12 additions & 8 deletions

File tree

src/libnfdump/filter/grammar.y

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1417,7 +1417,11 @@ static int AddGeo(direction_t direction, char *geo) {
14171417

14181418
data_t data = {.dataVal = direction};
14191419
int ret = -1;
1420+
#ifdef WORDS_BIGENDIAN
1421+
uint64_t geoVal = toupper(geo[1]) + (toupper(geo[0]) << 8);
1422+
#else
14201423
uint64_t geoVal = toupper(geo[0]) + (toupper(geo[1]) << 8);
1424+
#endif
14211425
switch (direction) {
14221426
case DIR_SRC:
14231427
ret = NewElement(EXlocal, OFFgeoSrcIP, SizeGEOloc, geoVal, CMP_GEO, FUNC_NONE, data);

src/test/nftest.c

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -944,17 +944,17 @@ static void runTest(void) {
944944
// local (processed) extension
945945
// geo location
946946
// src
947-
recordHandle->geo[0] = 'C';
948-
recordHandle->geo[1] = 'H';
947+
recordHandle->geo[OFFgeoSrcIP - OFFgeo] = 'C';
948+
recordHandle->geo[OFFgeoSrcIP - OFFgeo + 1] = 'H';
949949
// dst
950-
recordHandle->geo[2] = 'D';
951-
recordHandle->geo[3] = 'E';
950+
recordHandle->geo[OFFgeoDstIP - OFFgeo] = 'D';
951+
recordHandle->geo[OFFgeoDstIP - OFFgeo + 1] = 'E';
952952
// src nat
953-
recordHandle->geo[4] = 'U';
954-
recordHandle->geo[5] = 'S';
953+
recordHandle->geo[OFFgeoSrcNatIP - OFFgeo] = 'U';
954+
recordHandle->geo[OFFgeoSrcNatIP - OFFgeo + 1] = 'S';
955955
// dst nat
956-
recordHandle->geo[6] = 'A';
957-
recordHandle->geo[7] = 'T';
956+
recordHandle->geo[OFFgeoDstNatIP - OFFgeo] = 'A';
957+
recordHandle->geo[OFFgeoDstNatIP - OFFgeo + 1] = 'T';
958958

959959
CheckFilter("src geo CH", recordHandle, 1);
960960
CheckFilter("src geo CD", recordHandle, 0);

0 commit comments

Comments
 (0)