Bug 710131 - valgrind shows "Conditional jump or move depends on uninitialised value" on valid code
Summary: valgrind shows "Conditional jump or move depends on uninitialised value" on v...
Keywords:
Status: CLOSED NOTABUG
Alias: None
Product: Fedora
Classification: Fedora
Component: glibc
Version: 14
Hardware: i386
OS: Linux
unspecified
unspecified
Target Milestone: ---
Assignee: Andreas Schwab
QA Contact: Fedora Extras Quality Assurance
URL:
Whiteboard:
Depends On:
Blocks:
TreeView+ depends on / blocked
 
Reported: 2011-06-02 14:01 UTC by rafal.lists
Modified: 2016-11-24 16:07 UTC (History)
3 users (show)

Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Clone Of:
Environment:
Last Closed: 2011-06-03 13:59:55 UTC
Type: ---


Attachments (Terms of Use)
Code to compile (780 bytes, application/octet-stream)
2011-06-02 14:01 UTC, rafal.lists
no flags Details

Description rafal.lists 2011-06-02 14:01:19 UTC
Created attachment 502542 [details]
Code to compile

Description of problem:
When running following code:

#include <locale>

int main(int argc, char *argv[])
{
    std::wstring wide(L"ala");

    std::locale locale;
    std::mbstate_t mystate;

    const std::codecvt<wchar_t, char, std::mbstate_t>& facet =
    std::use_facet<std::codecvt<wchar_t, char, std::mbstate_t> >( locale );

    std::codecvt<wchar_t,char, std::mbstate_t>::result myresult;

    size_t length = 1000;
    char* buffer = new char[length];

    const wchar_t* pwc;
    char* pc;


    // translate characters:
    myresult = facet.out (mystate,
                            wide.c_str(), wide.c_str()+ wide.size(), pwc,
                            buffer, buffer + length, pc);

    delete [] buffer;

    if ( myresult == std::codecvt<wchar_t,char,mbstate_t>::ok )
        return 0;
    else
        return 1;
}

I receive following output from valgrind:
==31825== Memcheck, a memory error detector
==31825== Copyright (C) 2002-2009, and GNU GPL'd, by Julian Seward et al.
==31825== Using Valgrind-3.5.0 and LibVEX; rerun with -h for copyright info
==31825== Command: ./AAA
==31825== 
==31825== Conditional jump or move depends on uninitialised value(s)
==31825==    at 0xB14D83: __gconv_transform_internal_ascii (in /lib/libc-2.13.so)
==31825==    by 0xB7A604: wcsnrtombs (in /lib/libc-2.13.so)
==31825==    by 0x5A8D446: std::codecvt<wchar_t, char, __mbstate_t>::do_out(__mbstate_t&, wchar_t const*, wchar_t const*, wchar_t const*&, char*, char*, char*&) const (in /usr/lib/libstdc++.so.6.0.14)
==31825==    by 0x8048988: std::__codecvt_abstract_base<wchar_t, char, __mbstate_t>::out(__mbstate_t&, wchar_t const*, wchar_t const*, wchar_t const*&, char*, char*, char*&) const (in /home/rafal/workspace/AAA/AAA)
==31825==    by 0x80488B6: main (in /home/rafal/workspace/AAA/AAA)
==31825==  Uninitialised value was created by a stack allocation
==31825==    at 0x80487DC: main (in /home/rafal/workspace/AAA/AAA)
==31825== 
==31825== 
==31825== HEAP SUMMARY:
==31825==     in use at exit: 0 bytes in 0 blocks
==31825==   total heap usage: 2 allocs, 2 frees, 1,028 bytes allocated
==31825== 
==31825== All heap blocks were freed -- no leaks are possible
==31825== 
==31825== For counts of detected and suppressed errors, rerun with: -v
==31825== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 15 from 8)

When I use this code in some larger application it crashes.

Version-Release number of selected component (if applicable):
libc 2.13
gcc version 4.5.1 20100924 (Red Hat 4.5.1-4) (GCC)

How reproducible:


Steps to Reproduce:
1.g++ main.cpp -o AAA
2.valgrind ./AAA
3.

Comment 1 Andreas Schwab 2011-06-03 13:59:55 UTC
Initialize it then.


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