Bug 13569 (n/a) - Examples in some pages make invalid use of the assert macro
Summary: Examples in some pages make invalid use of the assert macro
Status: RESOLVED CODE_FIX
Alias: n/a
Product: Documentation
Classification: Unclassified
Component: man-pages (show other bugs)
Hardware: All Linux
: P1 normal
Assignee: documentation_man-pages@kernel-bugs.osdl.org
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2009-06-18 15:10 UTC by Andrey Vihrov
Modified: 2010-08-30 14:34 UTC (History)
1 user (show)

See Also:
Kernel Version: n/a
Subsystem:
Regression: No
Bisected commit-id:


Attachments

Description Andrey Vihrov 2009-06-18 15:10:25 UTC
The purpose of the assert macro, defined in <assert.h>, is to provide a tool to check for programming mistakes or program logic errors. However, the assert macro must never be used to perform checks for run time errors, since, with the NDEBUG macro defined, expressions within the assert macro invocations are not evaluated/checked for, resulting in behavior that was not originally intended.

Currently (man-pages 3.20, Gentoo Linux), some pages contain example programs that use assert to check for run time errors, specifically, like this:

#include <assert.h>

int main (int argc, char *argv[])
{
    assert(argc == 2); /* Check for argc value was intended */
}

The proper way to do this is without assert, for example, like this:

#include <stdio.h>
#include <stdlib.h>

int main (int argc, char *argv[])
{
    if (argc != 2)
    {
        fprintf(stderr, "invalid parameter count\n");
        exit(EXIT_FAILURE);       
    }
}

The pages affected in the core package are

execve(2)
pipe(2)
tee(2)
fmemopen(3)
mq_notify(3)
qsort(3)
Comment 1 Michael Kerrisk 2009-09-15 04:38:14 UTC
Agreed. For man-pages-3.23, I've fixed all of the pages as you suggest

Note You need to log in before you can comment on or make changes to this bug.