aboutsummaryrefslogtreecommitdiffstats
path: root/lib/erl_interface/src
AgeCommit message (Collapse)Author
2011-09-08Merge branch 'ms/ei-int-overflow-in-string-atom-enc' into devHenrik Nord
* ms/ei-int-overflow-in-string-atom-enc: ei: integer overflow in string/atom encoding OTP-9530
2011-06-29Align ei buffer according to size of pointersBjörn-Egil Dahlberg
2011-06-07ei: integer overflow in string/atom encodingMichael Santos
ei_encode_atom() and ei_encode_string() use strlen() to get the length of the buffer. As strlen() returns an unsigned long long and both ei functions take a signed integer, the length fields may overflow. Check the results of strlen can be held in a signed integer.
2011-05-20Update copyright yearsBjörn-Egil Dahlberg
2011-05-17Remove unused variable in epmd_portBjörn-Egil Dahlberg
2011-05-11Merge branch 'gl/erl_do_receive_msg/OTP-9241' into devBjörn-Egil Dahlberg
* gl/erl_do_receive_msg/OTP-9241: The function 'erl_xreceive_msg' returned garbage in the 'to' and 'to_name' members of the message. The reason for that was found in the 'erl_do_receive_msg' function. When no 'pid' is provided by the sender, like when doing rpc calls as those uses registered name sends, it doesn't initialize the 'to' member and also the 'to_name' member is copied by the function.
2011-04-26The function 'erl_xreceive_msg' returned garbage in the 'to' and 'to_name' ↵Goran Larsson
members of the message. The reason for that was found in the 'erl_do_receive_msg' function. When no 'pid' is provided by the sender, like when doing rpc calls as those uses registered name sends, it doesn't initialize the 'to' member and also the 'to_name' member is copied by the function.
2011-04-13erl_interface: fix compile errorMichael Santos
2011-03-24Merge branch 'cg/fix-sizeof-array-arg' into devHenrik Nord
* cg/fix-sizeof-array-arg: Fix using sizeof() for array given as function argument OTP-9151
2011-03-11Update copyright yearsBjörn-Egil Dahlberg
2011-02-25Fix using sizeof() for array given as function argumentCristian Greco
When using the sizeof() operator for an array given as function argument it returns the size of the pointer. In this case, the affected function hex(char digest[16], char buff[33]) will just print 4 or 8 byte instead of the full length of 16 bytes, on 32bit and 64bit systems respectively.
2011-02-22ei: buffer overflow when decoding atomsMichael Santos
2011-02-22erl_interface: fix buffer overflowsMichael Santos
2011-01-03Merge branch 'vb/ei-exts' into devBjörn-Egil Dahlberg
* vb/ei-exts: Fix testcases erl_global_whereis, erl_global_names Fix wrong erl_compare_ext result comparing lists Correct erl_global{register, unregister} functions Add PID (~p) type parameters to ei_format Add char (~c) type parameters to ei_format OTP-9015 Conflicts: lib/erl_interface/include/ei.h
2010-12-15Remove ancient distribution message DOP_NODE_LINK from all codePatrik Nyblom
2010-12-10Fix wrong erl_compare_ext result comparing listsVitaliy Batichko
Function erl_compare_ext of erl_interface library returns 1 instead -1 when comparing lists like [0] and [0, 1000]. Credits to: Evgeny Khirin <evgeny.khirin <at> erlios.com>
2010-12-10Correct erl_global{register, unregister} functionsVitaliy Batichko
C node needs DFLAG_DIST_MONITOR flag set when connecting, and support for processing monitoring start/end messages received from counterpart, to make global registration actually work.
2010-12-08Add PID (~p) type parameters to ei_formatVitaliy Batichko
2010-12-08Add char (~c) type parameters to ei_formatVitaliy Batichko
2010-11-25erl_interface: Fix erl_term_len for integers and refsSverker Eriksson
From R14B integers use all 32 bits of external format INTEGER_EXT. erl_term_len still had the 28-bit check and therefor returned a too large values (7 instead of 5) for integers of 29-32 bits. erl_term_len also returned a 2 bytes too small value for references.
2010-11-22Merge branch 'ms/ei-fixes' into devBjörn-Egil Dahlberg
* ms/ei-fixes: ei: check memory was allocated ei: error if return value of ei_alloc_big is NULL OTP-8943
2010-11-22Merge branch 'ms/ei-fix-node-name-overflow' into devBjörn-Egil Dahlberg
* ms/ei-fix-node-name-overflow: ei: check the length of the node name OTP-8943
2010-11-11Merge branch 'maint-r14' into devBjörn-Egil Dahlberg
2010-11-08Fix faulty tracelevel in erl_interfaceBjörn-Egil Dahlberg
2010-10-29ei: check memory was allocatedMichael Santos
2010-10-29ei: error if return value of ei_alloc_big is NULLMichael Santos
2010-10-26ei: check the length of the node nameMichael Santos
Check the length of the node name to prevent an overflow.
2010-10-14Merge branch 'ms/fix-zero-byte-allocation' into devBjörn-Egil Dahlberg
* ms/fix-zero-byte-allocation: registry: fix zero byte allocation OTP-8893
2010-10-14Merge branch 'sv/ei-number-parsing' into devBjörn-Egil Dahlberg
* sv/ei-number-parsing: teach ei_x_format to handle unary - and + OTP-8891
2010-10-06teach ei_x_format to handle unary - and +Steve Vinoski
Teach the format string parser used for ei_x_format() and ei_x_format_wo_ver() about unary negative and positive operators on numbers. Previously, passing a negative numeric constant or a positive numeric constant with an explicit leading plus sign within the format string would cause these functions to fail. Augment the format_wo_ver unit test in the ei_format suite with a regression test for these cases. An easy way to reproduce the problem is to use erl_call: erl_call -s foo@bar -a 'erlang list_to_integer [-1]' Without this change, erl_call fails with a -1 exit status. With this change, it properly prints "-1".
2010-10-06registry: fix zero byte allocationMichael Santos
Pasto in code results in 0 bytes (instead of length bytes) being allocated when the length of the key exceeds the static buffer.
2010-10-06erl_call: remove get_hostentMichael Santos
get_hostent does not properly handle IPv4 addresses on little endian platforms and fails with hostnames beginning with a number. Remove get_hostent and use ei_gethostbyname directly since gethostbyname supports IPv4 addresses. Reported-By: Julien Barbot
2010-09-13Merge branch 'pan/epmd-vulnerabilities/OTP-8780' into devPatrik Nyblom
* pan/epmd-vulnerabilities/OTP-8780: Teach testcases to survive TIME_WAIT overload Update erl_interface doc and testsuite for epmd changes Restore null termination of input buffer Teach testcase epmd_SUITE:too_large to accept econnaborted Teach epmd_cli.c to not respond 'Killed' when killing denied Calculate minimal packet size for ALIVE2 requests correctly Document epmd and it's options properly and fixup help text Fix anomalies in epmd not yet reported as security issues Remove two buffer overflow vulnerabilities in EPMD Remove all support for ancient EPMD protocol Remove very old protocol from EPMD Conflicts: lib/erl_interface/src/epmd/epmd_port.c
2010-09-13Merge branch 'sv/ei-writev' into devBjörn-Egil Dahlberg
* sv/ei-writev: fix incorrect writev iovec buffer handling in ei OTP-8837
2010-09-13Teach Winsock initialization to be thread safePatrik Nyblom
2010-09-11fix incorrect writev iovec buffer handling in eiSteve Vinoski
For platforms that support writev, ei uses iovec structures to be able to easily send noncontiguous data buffers. When sending large messages, the socket can of course block, in which case ei adjusts its iovecs to pick up where it left off when the socket becomes writeable again. Unfortunately the code that handled the case when the number of bytes written are less than the current iovec size adjusted only the iovec byte count but not the iovec data pointer, resulting in the same data being sent multiple times. The fix is trivial: in addition to subtracting the count of bytes already written from the current iovec's size, also increment the current iovec's data pointer by the number of bytes already written. Tested manually on Linux and verified to fix a problem detected in production with writing large binaries from a cnode to a regular node. No unit tests were added, however, because they use the local loopback which acts more like a pipe than an inter-host TCP connection. The closing of the TCP window on the receiving side and the resultant write blocking on the socket, which in turn caused the code that mishandled the iovecs to be exercised, could unfortunately not be readily duplicated in the erl_interface test suite.
2010-09-08erl_call: fix multiple buffer overflowsMichael Santos
Check operations that can overflow, e.g., erl_call -sname $(perl -e 'print "x"x5000') perl -e 'print "-module(", "x"x10000, ");"' | erl_call -m -r -sname foo
2010-09-07Merge branch 'mk/net-dragonfly-bsd-patches' into devBjörn Gustavsson
* mk/net-dragonfly-bsd-patches: Remove unused variables Use proper install method Add support for DragonFly BSD Add support for NetBSD
2010-08-31Remove all support for ancient EPMD protocolPatrik Nyblom
2010-08-23ei: prevent overflow in ei_connect_init/ei_xconnectMichael Santos
Check the length of the buffer before copying. ei_cnode ec; struct in_addr addr; char *node = (char *)calloc(5001, 1); (void)memset(node, 'x', 5000); ei_connect_init(&ec, node, "", 0); addr.s_addr = inet_addr("192.168.1.1"); ei_xconnect(&ec, &addr, node);
2010-08-13Add support for DragonFly BSDMartti Kuparinen
These are the current NetBSD pkgsrc patches.
2010-07-27Fix compiler warnings in erl_interfaceBjörn-Egil Dahlberg
- Removed unused variable in ei_decode_term.c - Fixed faulty deallocation
2010-07-05term_to_binary use all 32 bits of INTEGER_EXTSverker Eriksson
Earlier, external format INTEGER_EXT was only produced for 28-bit signed integers. Now full 32-bit signed integers are produced as INTEGER_EXT to avoid the more costly SMALL_BIG_EXT format. Both old and new code can read 32-bit INTEGER_EXT. Also fixed integer encoding bugs in erl_interface erl_encode/erl_decode. (Thanks to Alexander Demidenko for reporting)
2010-06-08Merge branch 'sv/serge-new_float_ext' into devErlang/OTP
* sv/serge-new_float_ext: Let ei_get_type() return ERL_FLOAT_EXT instead of NEW_FLOAT_EXT Fix ei_tmo to restrict dflags to NEW_FLOAT_EXT compact IEEE 754 double encoding in external binary format for ei fix typo in ei_decode_ei_term documentation OTP-8684 sv/serge-new_float_ext compact IEEE 754 double encoding in external binary format for ei Implement the compact IEEE 754 double encoding in external binary format for ei. Encoding for ei now always produces the NEW_FLOAT_EXT format. Decoding and term printing handle both the old ERL_FLOAT_EXT encoding and the new NEW_FLOAT_EXT encoding. Legacy erl_interface code also handles the new encoding, but still produces the ERL_FLOAT_EXT encoding by default. Also enable the DFLAG_NEW_FLOATS distribution flag. ei_get_type() will return ERL_FLOAT_EXT regardless if the external format is encoded with ERL_FLOAT_EXT or NEW_FLOAT_EXT for doubles. Reduce the number of copies of the code for encoding and decoding doubles throughout ei and erl_interface by instead calling the ei encoding and decoding functions wherever possible. Restore commented-out float tests in ei_decode_SUITE and ei_encode_SUITE in lib/erl_interface/test. Modify them to make them match the style of other tests in the same suites. These changes are based on an ei float patch from Serge Aleynikov originally submitted against R12B-2 in July 2008 and reworked by Steve Vinoski May 2010.
2010-06-07Let ei_get_type() return ERL_FLOAT_EXT instead of NEW_FLOAT_EXTBjörn-Egil Dahlberg
2010-06-07compact IEEE 754 double encoding in external binary format for eiSteve Vinoski
Implement the compact IEEE 754 double encoding in external binary format for ei. Encoding for ei now always produces the NEW_FLOAT_EXT format. Decoding and term printing handle both the old ERL_FLOAT_EXT encoding and the new NEW_FLOAT_EXT encoding. Legacy erl_interface code also handles the new encoding, but still produces the ERL_FLOAT_EXT encoding by default. Also enable the DFLAG_NEW_FLOATS distribution flag. Reduce the number of copies of the code for encoding and decoding doubles throughout ei and erl_interface by instead calling the ei encoding and decoding functions wherever possible. Restore commented-out float tests in ei_decode_SUITE and ei_encode_SUITE in lib/erl_interface/test. Modify them to make them match the style of other tests in the same suites. These changes are based on an ei float patch from Serge Aleynikov originally submitted against R12B-2 in July 2008.
2010-02-22OTP-8466: Fix ei to build on vxworksBjörn-Egil Dahlberg
2010-02-03OTP-8323 Cross compilation improvements and other build systemRickard Green
improvements. Most notable: Lots of cross compilation improvements. The old cross compilation support was more or less non-existing as well as broken. Please, note that the cross compilation support should still be considered as experimental. Also note that old cross compilation configurations cannot be used without modifications. For more information on cross compiling Erlang/OTP see the $ERL_TOP/xcomp/README file. Support for staged install using <url href="http://www.gnu.org/prep/standards/html_node/DESTDIR.html">D ESTDIR</url>. The old broken INSTALL_PREFIX has also been fixed. For more information see the $ERL_TOP/README file. Documentation of the release target of the top Makefile. For more information see the $ERL_TOP/README file. make install now by default creates relative symbolic links instead of absolute ones. For more information see the $ERL_TOP/README file. $ERL_TOP/configure --help=recursive now works and prints help for all applications with configure scripts. Doing make install, or make release directly after make all no longer triggers miscellaneous rebuilds. Existing bootstrap system is now used when doing make install, or make release without a preceding make all. The crypto and ssl applications use the same runtime library path when dynamically linking against libssl.so and libcrypto.so. The runtime library search path has also been extended. The configure scripts of erl_interface and odbc now search for thread libraries and thread library quirks the same way as erts do. The configure script of the odbc application now also looks for odbc libraries in lib64 and lib/64 directories when building on a 64-bit system. The config.h.in file in the erl_interface application is now automatically generated in instead of statically updated which reduces the risk of configure tests without any effect.
2010-02-02Merge branch 'sf/erl_match-longlong' into ccase/r13b04_devErlang/OTP
* sf/erl_match-longlong: erl_interface: Allow erl_match() to match ERL_LONGLONG and ERL_U_LONGLONG terms OTP-8400 Allow erl_match() to match ERL_LONGLONG and ERL_U_LONGLONG terms (Thanks to Scott Lystig Fritchie).
2010-01-23erl_interface: Allow erl_match() to match ERL_LONGLONG and ERL_U_LONGLONG termsScott Lystig Fritchie
The Erlang/OTP distro now includes 90% of what's required to handle signed and unsigned ints up to 8 bytes long, so add this remaining (?) 10%.