| Age | Commit message (Collapse) | Author | |
|---|---|---|---|
| 2017-09-01 | py/modstruct: Check and prevent buffer-write overflow in struct packing. | Damien George | |
| Prior to this patch, the size of the buffer given to pack_into() was checked for being too small by using the count of the arguments, not their actual size. For example, a format spec of '4I' would only check that there was 4 bytes available, not 16; and 'I' would check for 1 byte, not 4. The pack() function is ok because its buffer is created to be exactly the correct size. The fix in this patch calculates the total size of the format spec at the start of pack_into() and verifies that the buffer is large enough. This adds some computational overhead, to iterate through the whole format spec. The alternative is to check during the packing, but that requires extra code to handle alignment, and the check is anyway not needed for pack(). So to maintain minimal code size the check is done using struct_calcsize. | |||
| 2017-09-01 | py/modstruct: Check and prevent buffer-read overflow in struct unpacking | Damien George | |
| Prior to this patch, the size of the buffer given to unpack/unpack_from was checked for being too small by using the count of the arguments, not their actual size. For example, a format spec of '4I' would only check that there was 4 bytes available, not 16; and 'I' would check for 1 byte, not 4. This bug is fixed in this patch by calculating the total size of the format spec at the start of the unpacking function. This function anyway needs to calculate the number of items at the start, so calculating the total size can be done at the same time. | |||
| 2017-09-01 | py/modstruct: In struct.pack, stop converting if there are no args left. | Damien George | |
| This patch makes a repeat counter behave the same as repeating the typecode, when there are not enough args. For example: struct.pack('2I', 1) now behave the same as struct.pack('II', 1). | |||
| 2017-09-01 | tests/class_new: Add another testcase for __new__/__init__ interaction. | Paul Sokolovsky | |
| Similar to the existing testcase, but test that returning both value of native type and instance of another user class from __new__ lead to __init__ not being called, for better coverage. | |||
| 2017-08-30 | tests/class_new: Add checks for __init__ being called and other improvements. | Paul Sokolovsky | |
| 2017-08-30 | tests/object_new: Better messages, check user __new__() method. | Paul Sokolovsky | |
| Make messages more verbose and easier to follow and check that user class' __new__() is not called by object.__new__(user_class). | |||
| 2017-08-30 | py/objtype: Handle NotImplemented return from binary special methods. | Paul Sokolovsky | |
| NotImplemented means "try other fallbacks (like calling __rop__ instead of __op__) and if nothing works, raise TypeError". As MicroPython doesn't implement any fallbacks, signal to raise TypeError right away. | |||
| 2017-08-29 | py/objstr: startswith, endswith: Check arg to be a string. | Paul Sokolovsky | |
| Otherwise, it will silently get incorrect result on other values types, including CPython tuple form like "foo.png".endswith(("png", "jpg")) (which MicroPython doesn't support for unbloatedness). | |||
| 2017-08-17 | py/binary: Change internal bytearray typecode from 0 to 1. | Damien George | |
| The value of 0 can't be used because otherwise mp_binary_get_size will let a null byte through as the type code (intepreted as byterray). This can lead to invalid type-specifier strings being let through without an error in the struct module, and even buffer overruns. | |||
| 2017-08-15 | py/binary.c: Fix bug when packing big-endian 'Q' values. | Bas van Sisseren | |
| Without bugfix: struct.pack('>Q', 16) b'\x00\x00\x00\x10\x00\x00\x00\x00' With bugfix: struct.pack('>Q', 16) b'\x00\x00\x00\x00\x00\x00\x00\x10' | |||
| 2017-08-09 | py/objstr: Raise an exception for wrong type on RHS of str binary op. | Damien George | |
| The main case to catch is invalid types for the containment operator, of the form str.__contains__(non-str). | |||
| 2017-08-09 | py/objtuple: Allow to use inplace-multiplication operator on tuples. | Damien George | |
| 2017-07-31 | all: Use the name MicroPython consistently in comments | Alexander Steffen | |
| There were several different spellings of MicroPython present in comments, when there should be only one. | |||
| 2017-07-21 | tests/basics/builtin_exec: Test various globals/locals args to exec(). | Tom Collins | |
| 2017-07-21 | tests: Rename exec1.py to builtin_exec.py. | Damien George | |
| 2017-07-07 | py/objgenerator: Allow to hash generators and generator instances. | Damien George | |
| Adds nothing to the code size, since it uses existing empty slots in the type structures. | |||
| 2017-07-05 | tests/basics: Add tests for arithmetic operators precedence. | Krzysztof Blazewicz | |
| 2017-06-29 | tests/basics/namedtuple1: Add test for creating with pos and kw args. | Damien George | |
| 2017-06-22 | tests/basics: Add tests for for-else statement. | Damien George | |
| 2017-06-15 | py/objint: In to_bytes(), allow length arg to be any int and check sign. | Damien George | |
| 2017-06-15 | py/objint: Support "big" byte-order in int.to_bytes(). | Damien George | |
| 2017-06-14 | py/compile: Raise SyntaxError if positional args are given after */**. | Damien George | |
| In CPython 3.4 this raises a SyntaxError. In CPython 3.5+ having a positional after * is allowed but uPy has the wrong semantics and passes the arguments in the incorrect order. To prevent incorrect use of a function going unnoticed it is important to raise the SyntaxError in uPy, until the behaviour is fixed to follow CPython 3.5+. | |||
| 2017-06-10 | tests/basics: Convert "sys.exit()" to "raise SystemExit". | Paul Sokolovsky | |
| 2017-06-02 | tests/basics/string_rsplit: Add tests for negative "maxsplit" argument. | Damien George | |
| 2017-05-29 | various: Spelling fixes | Ville Skyttä | |
| 2017-05-25 | tests/basics: Add more tests for unwind jumps from within a try-finally. | Damien George | |
| These tests excercise cases that are fixed by the previous two commits. | |||
| 2017-05-18 | tests/basics/builtin_range: Add tests for negative slicing of range. | Damien George | |
| 2017-05-18 | tests/basics/list_slice_3arg: Add more tests for negative slicing. | Damien George | |
| 2017-05-12 | tests/basics/lexer: Add line continuation tests for lexer. | Tom Collins | |
| Tests for an issue with line continuation failing in paste mode due to the lexer only checking for \n in the "following" character position, before next_char() has had a chance to convert \r and \r\n to \n. | |||
| 2017-05-09 | tests/basics/lexer: Add lexer tests for input starting with newlines. | Tom Collins | |
| 2017-05-09 | tests/basics: Add memoryview test for big ints. | Damien George | |
| 2017-05-09 | tests/basics: Update array test for big-int with lL typecodes. | Damien George | |
| 2017-05-06 | tests: Move super-as-local test from cpydiff to basic tests. | Damien George | |
| It's now possible to use the name "super" as a local variable. | |||
| 2017-04-25 | tests/basics: Add tests for int.from_bytes when src has trailing zeros. | Damien George | |
| The trailing zeros should be truncated from the converted value. | |||
| 2017-04-22 | tests: Add tests for calling super and loading a method directly. | Damien George | |
| 2017-04-05 | tests/basics: Add test for tuple inplace add. | Damien George | |
| 2017-04-05 | tests/basics: Add tests for raising ValueError when range() gets 0 step. | Damien George | |
| 2017-04-02 | tests/basics: Add tests for list and bytearray growing using themselves. | Damien George | |
| 2017-03-27 | tests/basics: Add test for super() when self is closed over. | Damien George | |
| 2017-03-16 | tests/basics/bytes_add: Add tests for optimised bytes addition. | Damien George | |
| 2017-03-15 | tests/basics: Move string-modulo-format int tests to dedicated file. | Damien George | |
| 2017-03-15 | tests/basics: Add test for string module formatting with int argument. | Damien George | |
| 2017-03-15 | tests/basics/string_format2: Adjust comment now that tests succeed. | Damien George | |
| 2017-03-14 | tests/basics/struct_micropython: Add test for 'S' typecode in ustruct. | Damien George | |
| The 'S' typecode is a uPy extension so it should be grouped with the other extension (namely 'O' typecode). Testing 'S' needs uctypes which is an extmod module and not always available, so this test is made optional and will only be run on ports that have (u)struct and uctypes. Otherwise it will be silently skipped. | |||
| 2017-03-10 | tests/basics/fun_error: Split out skippable test. | Paul Sokolovsky | |
| 2017-03-09 | tests/dict_fromkeys: Split out skippable part. | Paul Sokolovsky | |
| 2017-03-09 | tests/basic: Make various tests skippable. | Paul Sokolovsky | |
| 2017-03-07 | tests/basics/unpack1.py: Test if *a, = b copies b when b is a list. | Krzysztof Blazewicz | |
| 2017-03-07 | tests/basics/string_join.py: Add test case where argument is not iterable. | Krzysztof Blazewicz | |
| 2017-03-04 | tests/basic: Split tests into working with small ints and not working. | Paul Sokolovsky | |
| Tests which don't work with small ints are suffixed with _intbig.py. Some of these may still work with long long ints and need to be reclassified later. | |||
