Skip to content

Conversation

Copy link

Copilot AI commented Jan 17, 2026

Fix RealIpResolver test failure on s390x (big-endian architecture)

Root Cause Analysis:
The test shows "1.0.0.127" == "127.0.0.1" - bytes are reversed on s390x (big-endian) but not on x86_64/aarch64 (little-endian).

The issue is in RealIpResolver::CIDR::CIDR constructor and matchCidr:

  • htonl() converts host→network byte order
  • On little-endian: swaps bytes (correct)
  • On big-endian: no-op (incorrect when mixing with network byte order values)
  • ipNetEndian() returns network byte order (always big-endian)
  • Mixing htonl() with ipNetEndian() causes endianness bugs on big-endian systems

Solution:
Replace htonl() with direct network byte order constant or ensure consistent byte ordering across all architectures.

Plan:

  • Understand the codebase structure and build system
  • Identify the exact fix needed in RealIpResolver.cc
  • Implement the fix to handle endianness correctly
  • Build and run the RealIpResolver test to verify the fix
  • Request code review
  • Run security checks
Original prompt

This section details on the original issue you should resolve

<issue_title>CTest of RealIpResolver failed on s390x</issue_title>
<issue_description>Describe the bug

CTest of RealIpResolver failed on Fedora s390x, but passed on other architecture, like x86_64, aarch64.

+ /usr/bin/ctest --test-dir redhat-linux-build --output-on-failure --force-new-ctest-process -j2
Internal ctest changing into directory: /builddir/build/BUILD/drogon-1.9.11_20251226git39eb780-build/drogon-39eb78089d3c1f7d7024dd5053356d14409655f9/redhat-linux-build
Test project /builddir/build/BUILD/drogon-1.9.11_20251226git39eb780-build/drogon-39eb78089d3c1f7d7024dd5053356d14409655f9/redhat-linux-build
      Start  1: TestFrameworkSelfTest
      Start  2: Base64
 1/47 Test  drogonframework/drogon#1: TestFrameworkSelfTest ................   Passed    0.01 sec
      Start  3: URLCodec
 2/47 Test  drogonframework/drogon#2: Base64 ...............................   Passed    0.01 sec
      Start  4: Gzip
 3/47 Test  drogonframework/drogon#3: URLCodec .............................   Passed    0.01 sec
      Start  5: HttpViewData
 4/47 Test  drogonframework/drogon#4: Gzip .................................   Passed    0.01 sec
      Start  6: CookieTest
 5/47 Test  drogonframework/drogon#5: HttpViewData .........................   Passed    0.01 sec
      Start  7: ClassName
 6/47 Test  drogonframework/drogon#6: CookieTest ...........................   Passed    0.01 sec
      Start  8: HttpDate
 7/47 Test  drogonframework/drogon#7: ClassName ............................   Passed    0.01 sec
      Start  9: HttpHeaderRequest
 8/47 Test  drogonframework/drogon#8: HttpDate .............................   Passed    0.01 sec
      Start 10: HttpHeaderResponse
 9/47 Test  drogonframework/drogon#9: HttpHeaderRequest ....................   Passed    0.01 sec
      Start 11: ResponseSetCustomContentTypeString
10/47 Test drogonframework/drogon#10: HttpHeaderResponse ...................   Passed    0.01 sec
      Start 12: ResquestSetCustomContentTypeString
11/47 Test drogonframework/drogon#11: ResponseSetCustomContentTypeString ...   Passed    0.01 sec
      Start 13: Md5Test
12/47 Test drogonframework/drogon#12: ResquestSetCustomContentTypeString ...   Passed    0.01 sec
      Start 14: MsgBufferTest
13/47 Test drogonframework/drogon#13: Md5Test ..............................   Passed    0.01 sec
      Start 15: OStringStreamTest
14/47 Test drogonframework/drogon#14: MsgBufferTest ........................   Passed    0.01 sec
      Start 16: PubSubServiceTest
15/47 Test drogonframework/drogon#15: OStringStreamTest ....................   Passed    0.01 sec
      Start 17: SHA1Test
16/47 Test drogonframework/drogon#16: PubSubServiceTest ....................   Passed    0.01 sec
      Start 18: ExtensionTest
17/47 Test drogonframework/drogon#17: SHA1Test .............................   Passed    0.01 sec
      Start 19: ContentTypeTest
18/47 Test drogonframework/drogon#18: ExtensionTest ........................   Passed    0.01 sec
      Start 20: FileTypeTest
19/47 Test drogonframework/drogon#19: ContentTypeTest ......................   Passed    0.01 sec
      Start 21: DrObjectCreationTest
20/47 Test drogonframework/drogon#20: FileTypeTest .........................   Passed    0.01 sec
      Start 22: DrObjectNamespaceTest
21/47 Test drogonframework/drogon#21: DrObjectCreationTest .................   Passed    0.01 sec
      Start 23: IsAutoCreationClassTest
22/47 Test drogonframework/drogon#22: DrObjectNamespaceTest ................   Passed    0.01 sec
      Start 24: HttpFullDateTest
23/47 Test drogonframework/drogon#23: IsAutoCreationClassTest ..............   Passed    0.01 sec
      Start 25: MainLoopTest
24/47 Test drogonframework/drogon#24: HttpFullDateTest .....................   Passed    0.01 sec
      Start 26: CacheMapTest
25/47 Test drogonframework/drogon#25: MainLoopTest .........................   Passed    0.01 sec
      Start 27: StringOpsTest
26/47 Test drogonframework/drogon#27: StringOpsTest ........................   Passed    0.01 sec
      Start 28: ControllerCreation
27/47 Test drogonframework/drogon#28: ControllerCreation ...................   Passed    0.01 sec
      Start 29: MultiPartParser
28/47 Test drogonframework/drogon#29: MultiPartParser ......................   Passed    0.01 sec
      Start 30: MultiPartStreamParser
29/47 Test drogonframework/drogon#30: MultiPartStreamParser ................   Passed    0.01 sec
      Start 31: SlashRemoverTest
30/47 Test drogonframework/drogon#31: SlashRemoverTest .....................   Passed    0.01 sec
      Start 32: CanConvertFromStringStream
31/47 Test drogonframework/drogon#32: CanConvertFromStringStream ...........   Passed    0.01 sec
      Start 33: CanConstructFromString
32/47 Test drogonframework/drogon#33: CanConstructFromString ...............   Passed    0.01 sec
      Start 34: CanConvertFromString
33/47 Test drogonframework/drogon#34: CanConvertFr...

</details>



<!-- START COPILOT CODING AGENT SUFFIX -->

- Fixes drogonframework/drogon#2436

<!-- START COPILOT CODING AGENT TIPS -->
---

✨ Let Copilot coding agent [set things up for you](https://github.com/drogonframework/drogon/issues/new?title=✨+Set+up+Copilot+instructions&body=Configure%20instructions%20for%20this%20repository%20as%20documented%20in%20%5BBest%20practices%20for%20Copilot%20coding%20agent%20in%20your%20repository%5D%28https://gh.io/copilot-coding-agent-tips%29%2E%0A%0A%3COnboard%20this%20repo%3E&assignees=copilot) — coding agent works faster and does higher quality work when set up for your repo.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants