I am not sure why I am getting a segfault in the XMLString::transcode
function. Since I am new to Xerces I worked to produce a test program
that shows the error here on my system. This program was compiled with
GCC-4.1 and Xerces-c 2.7.0 on a Gentoo system. The segfault occurs at
the line in the Configuration_Tag_Names.cpp constructor:

          TAG_PASSWORD ( XMLString::transcode ( "password" ) )

Any help is appreciated.

Stephen

---------- backtrace from GDB ---------------------

#0  0xb7dbcdc0 in xercesc_2_7::XMLString::transcode ()
   from /usr/lib/libxerces-c.so.27
#1  0x08048e02 in Configuration_Tag_Names (this=0xbfaacf94)
    at Configuration_Tag_Names.cpp:17
#2  0x08048ac8 in main () at test_configuration_tag_names.cpp:7

-------------------- CODE --------------------------
#include "Configuration_Tag_Names.hpp"

using namespace libreverse::infrastructure;

int main (int, char** )
{
    Configuration_Tag_Names ctn;
}

#ifndef CONFIGURATION_TAG_NAMES_H
#define CONFIGURATION_TAG_NAMES_H

#include <xercesc/util/XercesDefs.hpp>

using namespace xercesc;

namespace libreverse {
namespace infrastructure {

    class Configuration_Tag_Names {
    public:
        XMLCh* TAG_TRANSFER_TYPE;
        XMLCh* TAG_FORMULA_DIRECTORY;
        XMLCh* TAG_FILE_PREFIX;
        XMLCh* TAG_DATABASE;
        XMLCh* TAG_MEMORY;
        XMLCh* TAG_HOST;
        XMLCh* TAG_USER;
        XMLCh* TAG_PASSWORD;

        Configuration_Tag_Names ();

        ~Configuration_Tag_Names() throw ();
    };  

} /* namespace infrastructure */
} /* namespace libreverse */

#endif /* CONFIGURATION_TAG_NAMES_H */

#include "Configuration_Tag_Names.hpp"
#include <xercesc/util/XMLString.hpp>
#include <exception>
#include <iostream>

namespace libreverse {
namespace infrastructure {

    Configuration_Tag_Names::Configuration_Tag_Names ()
        : TAG_TRANSFER_TYPE ( XMLString::transcode ( "transfer_type" ) ),
          TAG_FORMULA_DIRECTORY ( XMLString::transcode ( "formula_directory" ) 
),
          TAG_FILE_PREFIX ( XMLString::transcode ( "file_prefix" ) ),
          TAG_DATABASE ( XMLString::transcode ( "database" ) ),
          TAG_MEMORY ( XMLString::transcode ( "memory" ) ),
          TAG_HOST ( XMLString::transcode ( "host" ) ),
          TAG_USER ( XMLString::transcode ( "user" ) ),
          TAG_PASSWORD ( XMLString::transcode ( "password" ) )
    {}
    
    Configuration_Tag_Names::~Configuration_Tag_Names() throw ()
    {
        try {
            XMLString::release ( &TAG_TRANSFER_TYPE );
            XMLString::release ( &TAG_FORMULA_DIRECTORY );
            XMLString::release ( &TAG_FILE_PREFIX );
            XMLString::release ( &TAG_DATABASE );
            XMLString::release ( &TAG_MEMORY );
            XMLString::release ( &TAG_HOST );
            XMLString::release ( &TAG_USER );
            XMLString::release ( &TAG_PASSWORD );
        }
        catch ( std::exception& e ) {
            std::cerr << "Exception: " << e.what() << std::endl;
        }
    }

} /* namespace infrastructure */
} /* namespace libreverse */


Reply via email to