Skip to content

y2038: eliminate false positives with automatic build system detection #7631

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

Hiesx
Copy link

@Hiesx Hiesx commented Jun 26, 2025

The Y2038 addon currently generates false positive warnings when scanning
codebases that are properly configured for Y2038 safety through build
system flags, making it impractical for comprehensive codebase analysis.

This prevents teams from running Y2038 checks across entire projects in
CI/CD pipelines due to noise from correctly configured code.

Add automatic build system detection to discover Y2038-related compiler
flags (_TIME_BITS=64, _FILE_OFFSET_BITS=64, _USE_TIME_BITS64) from:

  • Makefile variants (Makefile, makefile, GNUmakefile, *.mk)
  • CMake files (CMakeLists.txt, *.cmake)
  • Meson build files (meson.build)
  • Autotools scripts (configure, configure.ac, configure.in)
  • Compiler flags passed via cppcheck -D options

When proper Y2038 configuration is detected (both _TIME_BITS=64 AND
_FILE_OFFSET_BITS=64), suppress Y2038 warnings and display an
informational message indicating the configuration source.

Implement hierarchical directory search up to 5 levels from source files
to locate relevant build files, with flag precedence: build system >
compiler flags > source code #define directives.

Add performance optimizations:

  • Intelligent file caching with TTL-based invalidation
  • UTF-8 BOM handling for cross-platform compatibility
  • Robust import fallback system

Extend test suite with comprehensive coverage:

  • Compiler flag parsing edge cases (18 test scenarios)
  • Build system detection for all supported formats
  • Caching behavior and performance validation
  • Cross-platform file encoding handling

This enables organizations to run comprehensive Y2038 analysis on entire
codebases without false positives from properly configured projects,
while maintaining detection of actual Y2038 safety issues.

@firewave
Copy link
Collaborator

Thanks for you contribution.

Please add buildsystem.py to addons/README.md and win_installer/cppcheck.wxs (all other packaging related stuff should use wildcards).

Also please add yourself to AUTHORS so you get credited.

@Hiesx Hiesx force-pushed the feature/y2038_buildsystem_detection branch from ba0a6d5 to 9edcaf2 Compare June 27, 2025 07:41
@Hiesx
Copy link
Author

Hiesx commented Jun 27, 2025

Added the buildsystem.py to addons/README.md and win_installer/cppcheck.wxs. In addition to this i also fixed the pylint errors!

Copy link
Owner

@danmar danmar left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I haven't really looked at the python code yet. Spontanously I feel this is very interesting and will make the y2038 more useful!

It's unfortunate that the doc/y2038.txt is a text document. It would probably make sense to switch to markdown. And I'm not sure why we don't have the info in the manual instead.
https://github.com/danmar/cppcheck/blob/main/man/manual.md#y2038py
I don't understand why the manual points at https://github.com/3adev/y2038
do you think that makes sense?

The Y2038 addon currently generates false positive warnings when scanning
  codebases that are properly configured for Y2038 safety through build
  system flags, making it impractical for comprehensive codebase analysis.

  This prevents teams from running Y2038 checks across entire projects in
  CI/CD pipelines due to noise from correctly configured code.

  Add automatic build system detection to discover Y2038-related compiler
  flags (_TIME_BITS=64, _FILE_OFFSET_BITS=64, _USE_TIME_BITS64) from:

  - Makefile variants (Makefile, makefile, GNUmakefile, *.mk)
  - CMake files (CMakeLists.txt, *.cmake)
  - Meson build files (meson.build)
  - Autotools scripts (configure, configure.ac, configure.in)
  - Compiler flags passed via cppcheck -D options

  When proper Y2038 configuration is detected (both _TIME_BITS=64 AND
  _FILE_OFFSET_BITS=64), suppress Y2038 warnings and display an
  informational message indicating the configuration source.

  Implement hierarchical directory search up to 5 levels from source files
  to locate relevant build files, with flag precedence: build system >
  compiler flags > source code #define directives.

  Add performance optimizations:
  - Intelligent file caching with TTL-based invalidation
  - UTF-8 BOM handling for cross-platform compatibility
  - Robust import fallback system

  Extend test suite with comprehensive coverage:
  - Compiler flag parsing edge cases (18 test scenarios)
  - Build system detection for all supported formats
  - Caching behavior and performance validation
  - Cross-platform file encoding handling

  This enables organizations to run comprehensive Y2038 analysis on entire
  codebases without false positives from properly configured projects,
  while maintaining detection of actual Y2038 safety issues.
@Hiesx Hiesx force-pushed the feature/y2038_buildsystem_detection branch from 9edcaf2 to e84499e Compare July 1, 2025 07:35
@Hiesx
Copy link
Author

Hiesx commented Jul 1, 2025

I also moved from the y2038.txt documentation file to a markdown one. Also the y2038.md file is now linked in the main manual and the reference to the 3adev/y2038 is now removed, since the current y2038 check is too different to reference it, imo.

for Y2038 safety. This enables analysis of entire codebases without being
overwhelmed by warnings from correctly configured code.

### Key improvements in this version:
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This feels more like text for a release notes document. Please write text that will be fully applicable in later releases also not just the next release.
We have a releasenotes.txt file in the rootfolder where you can describe the improvements you've made.

### Build System Detection:
The addon automatically searches for and parses the following build files:
- Makefiles (`Makefile`, `makefile`, `GNUmakefile`, `*.mk`)
- CMake files (`CMakeLists.txt`, `*.cmake`)
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can you get the information you need from a compile_commands.json file? then there is no need to handle cmake/.. explicitly if those can generate the compile_commands.json?

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.

3 participants