Bug 1034441
| Summary: | Net-SNMP libraries and headers are invalid due to hyphens. | |||
|---|---|---|---|---|
| Product: | Red Hat Enterprise Linux 6 | Reporter: | Bryan Totty <btotty> | |
| Component: | net-snmp | Assignee: | Jan Safranek <jsafrane> | |
| Status: | CLOSED ERRATA | QA Contact: | BaseOS QE Security Team <qe-baseos-security> | |
| Severity: | medium | Docs Contact: | ||
| Priority: | medium | |||
| Version: | 6.4 | CC: | dapospis, ebenes, jakub, mpolacek | |
| Target Milestone: | rc | Keywords: | Reopened | |
| Target Release: | --- | |||
| Hardware: | All | |||
| OS: | Linux | |||
| Whiteboard: | ||||
| Fixed In Version: | Doc Type: | Bug Fix | ||
| Doc Text: |
Cause:
net-snmp-config.h contains preprocessor macros with hyphen characters ('-') in their name. However, '-' is not allowed in a macro name.
Consequence:
C compiler shows extra 'warning: extra tokens at end of #ifdef directive', when compiling anything, that includes net-snmp-config.h
Fix:
Rename the macros to use underscores instead hyphens.
Result:
No compiler warnings.
|
Story Points: | --- | |
| Clone Of: | ||||
| : | 1038642 (view as bug list) | Environment: | ||
| Last Closed: | 2015-07-22 07:22:18 UTC | Type: | Bug | |
| Regression: | --- | Mount Type: | --- | |
| Documentation: | --- | CRM: | ||
| Verified Versions: | Category: | --- | ||
| oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | ||
| Cloudforms Team: | --- | Target Upstream Version: | ||
| Embargoed: | ||||
| Bug Depends On: | ||||
| Bug Blocks: | 1038642, 1075802 | |||
Affects current net-snmp packages in RHEL 6.5: net-snmp-libs-5.5-44.el6_4.4.x86_64 net-snmp-devel-5.5-44.el6_4.4.x86_64 net-snmp-5.5-44.el6_4.4.x86_64 net-snmp-utils-5.5-44.el6_4.4.x86_64 Sure, hyphen is not valid identifier, the above is handled essentially as #ifdef net with extra tokens after it for which it warns. Various sources contain extra tokens after e.g. #ifdef, or #else, #endif etc. If you want the compiler to error on this, just use -pedantic-errors, then you'll get a hard error instead of warning. Well, it can still be fixed on net-snmp side simply by renaming net-snmp-* symbols to net_snmp_*. Since the problem described in this bug report should be resolved in a recent advisory, it has been closed with a resolution of ERRATA. For information on the advisory, and where to find the updated files, follow the link below. If the solution does not work for you, open a new bug report. https://rhn.redhat.com/errata/RHSA-2015-1385.html |
Description of problem: Net-SNMP libraries and headers are invalid due to hyphens. Version-Release number of selected component (if applicable): gcc-4.4.7-4.el6.x86_64 libgcc-4.4.7-4.el6.x86_64 libgcc-4.4.7-4.el6.i686 How reproducible: 1. # vi test.c #ifdef net-snmp-config_multilib_redirection_h #endif int main() { return 0; } 2. # gcc -o test test.c test.c:1:11: warning: extra tokens at end of #ifdef directive Actual results: The C program compiles but warns of: test.c:1:11: warning: extra tokens at end of #ifdef directive. Remove the hyphens from the #ifdef and #define directives and the problem is fixed. Expected results: Absence of the extra token message. Additional info: Non-conformance of standards. C11 and C99 have a section under 6.4.2.1 that describes what is considered valid syntax for an identifier, which includes pre-processor macro identifiers. http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf is the standard document for C99 which provides a reference. Upon consideration of what is considered a valid identifier per C99, "net-snmp-config_multilib_redirection_h" is not a valid identifier because it contains a hyphen. The hyphen is not in the list of characters that are acceptable in an identifier.