mirror of
https://github.com/dvorka/hstr.git
synced 2024-12-27 01:42:23 +08:00
5ab8205859
This patch fixes a segfault when .zsh_history contains commands starting with `:` and longer than 15 characters long. Considering the history line: : 1592444398:0;:vspman epoll_ctl The ranked item's line will be: :vspman epoll_ctl When building the prioritized history, we used to apply the zsh extended history offset if the line starts with `:` (and if the command is longer than `15`, defined by `ZSH_HISTORY_ITEM_OFFSET`), which then makes the item point to: tl This makes the `r->item` pointer invalid, which causes the segfault observed in #408 within `prioritized_history_destroy`. --- This patch prevents the same issue from arising again (even if the line is wrongly interpreted) since it avoids any pointer arithmetic between assignment and freeing. Additionally, the patch also greatly improves the heuristics used in determining whether a line is of extended history format or not, since the non-extended format is also supported by zsh. --- Fix #410 Fix #399
59 lines
1.7 KiB
Prolog
59 lines
1.7 KiB
Prolog
# hstr-unit-tests.pro Qt project file of UNIT tests for HSTR
|
|
#
|
|
# Copyright (C) 2014-2020 Martin Dvorak <martin.dvorak@mindforger.com>
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
TEMPLATE = app
|
|
CONFIG += console
|
|
CONFIG -= app_bundle
|
|
CONFIG -= qt
|
|
QMAKE_CFLAGS += -DHSTR_TESTS_UNIT
|
|
|
|
# includes
|
|
INCLUDEPATH += unity/src/c
|
|
|
|
# -L for where to look for library, -l for linking the library
|
|
LIBS += -lm -lreadline -lncursesw -ltinfo
|
|
|
|
SOURCES += \
|
|
../src/hashset.c \
|
|
../src/hstr_blacklist.c \
|
|
../src/hstr_curses.c \
|
|
../src/hstr_favorites.c \
|
|
../src/hstr_history.c \
|
|
../src/hstr_regexp.c \
|
|
../src/hstr_utils.c \
|
|
../src/hstr.c \
|
|
../src/radixsort.c \
|
|
../test/src/test.c \
|
|
unity/src/c/unity.c \
|
|
src/test_runner.c
|
|
|
|
HEADERS += \
|
|
../src/include/hashset.h \
|
|
../src/include/hstr_blacklist.h \
|
|
../src/include/hstr_curses.h \
|
|
../src/include/hstr_favorites.h \
|
|
../src/include/hstr_history.h \
|
|
../src/include/hstr_regexp.h \
|
|
../src/include/hstr_utils.h \
|
|
../src/include/radixsort.h \
|
|
../src/include/hstr.h \
|
|
unity/src/c/unity_config.h \
|
|
unity/src/c/unity_internals.h \
|
|
unity/src/c/unity.h
|
|
|
|
# compiler and linker
|
|
QMAKE_CC = ccache gcc
|
|
QMAKE_LINK = gcc
|