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-snmpAssignee: Jan Safranek <jsafrane>
Status: CLOSED ERRATA QA Contact: BaseOS QE Security Team <qe-baseos-security>
Severity: medium Docs Contact:
Priority: medium    
Version: 6.4CC: dapospis, ebenes, jakub, mpolacek
Target Milestone: rcKeywords: 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    

Description Bryan Totty 2013-11-25 20:36:02 UTC
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.

Comment 1 Bryan Totty 2013-11-25 20:38:17 UTC
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

Comment 2 Jakub Jelinek 2013-11-25 20:56:08 UTC
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.

Comment 4 Jan Safranek 2013-12-05 14:40:49 UTC
Well, it can still be fixed on net-snmp side simply by renaming net-snmp-* symbols to net_snmp_*.

Comment 11 errata-xmlrpc 2015-07-22 07:22:18 UTC
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