Skip to content

Request-FP v1.2.0 Release Notes

Choose a tag to compare

@ikelaiah ikelaiah released this 01 Jan 08:43
· 37 commits to main since this release

Release Date: January 1, 2026

This is a minor feature release that adds architecture mismatch detection and dynamic DLL discovery to improve Windows OpenSSL diagnostics, including support for vendors with non-standard DLL naming conventions.

🎯 What's New

Architecture Mismatch Detection

After v1.1.0 release, we discovered that some users were still having OpenSSL failures even after following the installation instructions correctly. The root cause? They had 64-bit executables but 32-bit OpenSSL DLLs (or vice versa).

v1.2.0 makes this obvious:

When you run ssl_debug.exe, you now see:

=== OpenSSL Debug Information ===

Executable architecture: 64-bit
Required DLL names: libssl-*-x64.dll and libcrypto-*-x64.dll

If initialization fails, the error message now explicitly states:

OpenSSL initialization failed: Error loading library
This is a 64-bit executable. You need 64-bit DLLs:
  OpenSSL 1.1.x: libssl-1_1-x64.dll and libcrypto-1_1-x64.dll
  OpenSSL 3.x: libssl-3-x64.dll and libcrypto-3-x64.dll
IMPORTANT: Ensure DLL architecture (32-bit vs 64-bit) matches your executable!

📦 Changes

Enhanced Diagnostics

  1. ssl_debug Example - Shows executable architecture upfront
  2. Architecture-Specific Error Messages - Error messages now detect and display whether you need 32-bit or 64-bit DLLs
  3. Dynamic DLL Detection - New FindSSLDLLPath function shows which OpenSSL DLL FPC actually loaded
  4. ReadLn Pause - ssl_debug now pauses before exit when run from IDE (community contribution)

🔄 Upgrading from v1.1.0

Breaking Changes: None

Migration Required: No

Simply update your repository:

git pull origin main

All v1.1.0 code continues to work without modification.

📊 Changes Summary

  • Files Modified: 4 (CHANGELOG.md, README.md, src/Request.pas, examples/ssl_debug/ssl_debug.pas)
  • Library Features: Architecture detection in error messages, dynamic DLL discovery for debug mode
  • Bug Fixes: Better diagnostics for architecture mismatch, vendor version disguise detection
  • Breaking Changes: 0

🐛 What This Fixes

Problem 1: Users with mismatched executable/DLL architectures got cryptic "Error loading library" messages with no hint about the real issue.

Solution:

  • Detect executable architecture at runtime
  • Display required DLL names based on architecture
  • Provide explicit warnings about architecture matching

Problem 2: No visibility when vendors disguise OpenSSL versions (e.g., naming 3.x DLLs as 1.1.x).

Solution:

  • Dynamic module enumeration finds loaded DLLs containing "libssl" or "libcrypto"
  • Displays both filename AND actual version string to reveal mismatches

Problem 3: No visibility into which OpenSSL version FPC actually loaded.

Solution:

  • Dynamic DLL detection shows exact DLL paths loaded by FPC
  • Shows actual version string from the loaded DLL

Impact: Users can now instantly diagnose OpenSSL issues and verify which version FPC loaded, even when vendors disguise DLL versions.

📝 Full Changelog

See CHANGELOG.md for complete details.

🔗 Quick Links

💡 For Users Still Having Issues

If you're still experiencing OpenSSL failures after upgrading to v1.2.0:

  1. Run the debug tool:

    cd examples/ssl_debug
    lazbuild --build-mode=Debug ssl_debug.lpi
    ssl_debug.exe
  2. Check the architecture line - Does it say 64-bit or 32-bit?

  3. Verify your DLLs match - If you have a 64-bit exe, you MUST have DLLs with -x64 in the filename

  4. Check the installer you downloaded - Make sure it matches your architecture (Win64 vs Win32)

Understanding OpenSSL DLL Dependencies

Important discovery from community testing: FPC's openssl.pas tries multiple OpenSSL DLL names in priority order:

  • FPC tries (64-bit): libssl-3-x64 → libssl-1_1-x64 → ssleay32 → libssl32
  • FPC tries (32-bit): libssl-3 → libssl-1_1 → ssleay32 → libssl32

FPC correctly prioritizes OpenSSL 3.x first! However, Windows DLL search order may override this. If multiple versions exist in System32 or Known DLLs registry, Windows may load an older version despite FPC preferring newer ones. This is why dynamic DLL detection is valuable—it shows which version actually loaded.

This is a Windows-specific complexity - Linux uses dynamic library linking and works flawlessly.

v1.2.0's dynamic DLL detection uses EnumProcessModules to show users exactly which OpenSSL DLL Windows actually loaded from FPC's search list. This eliminates guesswork about which version is running.

Note for fpcupdeluxe Users

FYI: fpcupdeluxe with default settings installs 32-bit FPC, even on 64-bit Windows. This is a common choice for lower memory footprint and smaller executables.

If you're using 32-bit FPC, you need 32-bit OpenSSL:

  • Download: Win32OpenSSL_Light-3_6_0.exe (the Win32 installer)
  • Use DLLs: libssl-3.dll and libcrypto-3.dll (without -x64 suffix)

The v1.2.0 debug output shows your executable architecture (32-bit or 64-bit) upfront, making it easy to verify which OpenSSL version you need.

💝 Thank You

Special thanks to:

  • The community member who suggested adding ReadLn to prevent console auto-close in the IDE!
  • Gus for pointing out the hardcoded DLL name issue

Download: v1.2.0 Release

Previous Release: v1.1.0

Happy coding! 🚀