[CXX-1812] free(): invalid pointer when I use both MD5() and mongocxx::instance Created: 03/Sep/19  Updated: 13/Sep/19  Resolved: 12/Sep/19

Status: Closed
Project: C++ Driver
Component/s: None
Affects Version/s: 3.4.0
Fix Version/s: None

Type: Bug Priority: Major - P3
Reporter: liang wenxaing Assignee: Clyde Bazile III (Inactive)
Resolution: Cannot Reproduce Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified
Environment:

x86_64
ubuntu 16.04
4.15.0-58-generic



 Description   

test.cpp code:

#include <bsoncxx/json.hpp>
#include <bsoncxx/v_noabi/bsoncxx/builder/stream/document.hpp>
#include <bsoncxx/types.hpp>
#include <mongocxx/client.hpp>
#include <mongocxx/stdx.hpp>
#include <mongocxx/uri.hpp>
#include <mongocxx/instance.hpp>
#include <vector>
#include <string>
#include <iostream>
#include <openssl/md5.h>
 
std::string To_Hex_String(unsigned char* input, const int datasize) {
	std::string output;
	char ch[3];
 
	for (int i = 0; i < datasize; i++) {
		snprintf(ch, 3, "%02x", input[i]);
		output += ch;
	}
	return output;
}
 
int main(){
    unsigned char md5v[MD5_DIGEST_LENGTH];
    std::vector<unsigned char> data = {'a','b','c'};
    std::cout << To_Hex_String(MD5((unsigned char *) &data.front(), data.size(), md5v), MD5_DIGEST_LENGTH);
    mongocxx::instance instance{};
    mongocxx::uri uri("mongodb://10.210.196.55:27017");
    mongocxx::client client(uri);
    mongocxx::database db = client["Disassembly_process"]
}

Compile command:

g++ -g --std=c++11 -o test.out test.cpp  -I/usr/local/include/mongocxx/v_noabi -I/usr/local/include/libmongoc-1.0 -I/usr/local/include/bsoncxx/v_noabi -I/usr/local/include/libbson-1.0 -L/usr/local/lib -lmongocxx -lbsoncxx -lopenssl

Debug information:

Error in `/home/save/SAVE/tmp/test.out': free(): invalid pointer: 0x00007ffff607f860
......
Program received signal SIGABRT, Aborted.
0x00007ffff7006428 in __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:54
54      ../sysdeps/unix/sysv/linux/raise.c: No such file or directory.
 
#0  0x00007ffff7006428 in __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:54
#1  0x00007ffff700802a in __GI_abort () at abort.c:89
#2  0x00007ffff70487ea in __libc_message (do_abort=do_abort@entry=2,
    fmt=fmt@entry=0x7ffff7161ed8 "*** Error in `%s': %s: 0x%s ***\n")
    at ../sysdeps/posix/libc_fatal.c:175
#3  0x00007ffff705137a in malloc_printerr (ar_ptr=<optimized out>, ptr=<optimized out>,
    str=0x7ffff715ecaf "free(): invalid pointer", action=3) at malloc.c:5006
#4  _int_free (av=<optimized out>, p=<optimized out>, have_lock=0) at malloc.c:3867
#5  0x00007ffff705553c in __GI___libc_free (mem=<optimized out>) at malloc.c:2968
#6  0x00007ffff793608c in SSL_CTX_free () from /usr/lib/x86_64-linux-gnu/libgnutls-openssl.so.27
#7  0x00007ffff6b586f9 in _mongoc_do_init () from /usr/local/lib/libmongoc-1.0.so.0
#8  0x00007ffff518ea99 in __pthread_once_slow (once_control=0x7ffff6db22b4 <once>,
    init_routine=0x7ffff6b586f0 <_mongoc_do_init>) at pthread_once.c:116
#9  0x00007ffff7b97566 in std::unique_ptr<mongocxx::v_noabi::instance::impl, std::default_delete<mongocxx::v_noabi::instance::impl> > core::v1::make_unique<mongocxx::v_noabi::instance::impl, void, std::unique_ptr<mongocxx::v_noabi::logger, std::default_delete<mongocxx::v_noabi::logger> > >(std::unique_ptr<mongocxx::v_noabi::logger, std::default_delete<mongocxx::v_noabi::logger> >&&) ()
   from /usr/local/lib/libmongocxx.so._noabi
#10 0x00007ffff7b970e7 in mongocxx::v_noabi::instance::instance(std::unique_ptr<mongocxx::v_noabi::logger, std::default_delete<mongocxx::v_noabi::logger> >) () from /usr/local/lib/libmongocxx.so._noabi
#11 0x00007ffff7b97245 in mongocxx::v_noabi::instance::instance() ()
   from /usr/local/lib/libmongocxx.so._noabi
#12 0x0000000000400f54 in main () at test.cpp:34

Even if MD5() is included in the code and not called in main(), the program still reports error in mongocxx::instance instance{}



 Comments   
Comment by Clyde Bazile III (Inactive) [ 12/Sep/19 ]

Hi lwxlightrunner@gmail.com, unfortunately, this is not an error that can be reproduced locally as doing so outputs a valid MD5 hex value. For further guidance, our installation guide may be of use. It includes a section on Compiling without pkg-config or CMake that gives instructions on how to set include and library flags manually on the command line.

Thanks, clyde.bazile.

Generated at Wed Feb 07 22:04:00 UTC 2024 using Jira 9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66.