diff --git a/.gitignore b/.gitignore index c324909..8dcdd79 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ /aha-0.4.10.6.tar.gz /aha-0.5.tar.gz +/aha-0.5.1.tar.gz diff --git a/0000-fix-null-pointer-dereference.patch b/0000-fix-null-pointer-dereference.patch new file mode 100644 index 0000000..ef4206e --- /dev/null +++ b/0000-fix-null-pointer-dereference.patch @@ -0,0 +1,151 @@ +From a340963e0c40f3ea85fea911c79fbaaa5af93e27 Mon Sep 17 00:00:00 2001 +From: suve +Date: Thu, 9 Jun 2022 15:46:20 +0200 +Subject: [PATCH 1/2] Check if 24-bit colour codes contain 3 arguments + +--- + aha.c | 64 ++++++++++++++++++++++++++--------------------------------- + 1 file changed, 28 insertions(+), 36 deletions(-) + +diff --git a/aha.c b/aha.c +index 46e43c0..bf22373 100644 +--- a/aha.c ++++ b/aha.c +@@ -833,25 +833,21 @@ int main(int argc,char* args[]) + if (momelem->value == 38 && + momelem->next && + momelem->next->value == 2 && +- momelem->next->next)// 38;2; -> 24 Bit ++ momelem->next->next && ++ momelem->next->next->next && ++ momelem->next->next->next->next)// 38;2;;; -> 24 Bit + { +- momelem = momelem->next->next; +- pelem r,g,b; +- r = momelem; +- momelem = momelem->next; +- g = momelem; +- if ( momelem ) +- momelem = momelem->next; +- b = momelem; +- if ( r && g && b ) +- { +- state.highlighted = 0; +- state.fc_colormode = MODE_24BIT; +- *dest = +- (r->value & 255) * 65536 + +- (g->value & 255) * 256 + +- (b->value & 255); +- } ++ pelem r = momelem->next->next; ++ pelem g = r->next; ++ pelem b = g->next; ++ momelem = b; ++ ++ state.highlighted = 0; ++ state.fc_colormode = MODE_24BIT; ++ *dest = ++ (r->value & 255) * 65536 + ++ (g->value & 255) * 256 + ++ (b->value & 255); + } + else + { +@@ -901,25 +897,21 @@ int main(int argc,char* args[]) + if (momelem->value == 48 && + momelem->next && + momelem->next->value == 2 && +- momelem->next->next)// 48;2; -> 24 Bit ++ momelem->next->next && ++ momelem->next->next->next && ++ momelem->next->next->next->next)// 48;2;;; -> 24 Bit + { +- momelem = momelem->next->next; +- pelem r,g,b; +- r = momelem; +- momelem = momelem->next; +- g = momelem; +- if ( momelem ) +- momelem = momelem->next; +- b = momelem; +- if ( r && g && b ) +- { +- state.bc_colormode = MODE_24BIT; +- state.highlighted = 0; +- *dest = +- (r->value & 255) * 65536 + +- (g->value & 255) * 256 + +- (b->value & 255); +- } ++ pelem r = momelem->next->next; ++ pelem g = r->next; ++ pelem b = g->next; ++ momelem = b; ++ ++ state.bc_colormode = MODE_24BIT; ++ state.highlighted = 0; ++ *dest = ++ (r->value & 255) * 65536 + ++ (g->value & 255) * 256 + ++ (b->value & 255); + } + else + { + +From 1b8b994b058920cdc2fe144dca3243bacf1d49b2 Mon Sep 17 00:00:00 2001 +From: suve +Date: Thu, 9 Jun 2022 15:55:29 +0200 +Subject: [PATCH 2/2] Add a helper function to avoid ->next checks + +--- + aha.c | 23 +++++++++++++---------- + 1 file changed, 13 insertions(+), 10 deletions(-) + +diff --git a/aha.c b/aha.c +index bf22373..2bfebb7 100644 +--- a/aha.c ++++ b/aha.c +@@ -138,6 +138,15 @@ pelem parseInsert(char* s) + return firstelem; + } + ++int parseDepthAtLeast(pelem elem, unsigned int wanted) { ++ while (elem != NULL) { ++ if (wanted == 0) return 1; ++ elem = elem->next; ++ --wanted; ++ } ++ return 0; ++} ++ + void deleteParse(pelem elem) + { + while (elem!=NULL) +@@ -831,11 +840,8 @@ int main(int argc,char* args[]) + } + else + if (momelem->value == 38 && +- momelem->next && +- momelem->next->value == 2 && +- momelem->next->next && +- momelem->next->next->next && +- momelem->next->next->next->next)// 38;2;;; -> 24 Bit ++ parseDepthAtLeast(momelem, 4) && ++ momelem->next->value == 2)// 38;2;;; -> 24 Bit + { + pelem r = momelem->next->next; + pelem g = r->next; +@@ -895,11 +901,8 @@ int main(int argc,char* args[]) + } + else + if (momelem->value == 48 && +- momelem->next && +- momelem->next->value == 2 && +- momelem->next->next && +- momelem->next->next->next && +- momelem->next->next->next->next)// 48;2;;; -> 24 Bit ++ parseDepthAtLeast(momelem, 4) && ++ momelem->next->value == 2)// 48;2;;; -> 24 Bit + { + pelem r = momelem->next->next; + pelem g = r->next; diff --git a/aha.spec b/aha.spec index 4617ef2..01cec12 100644 --- a/aha.spec +++ b/aha.spec @@ -1,13 +1,21 @@ Name: aha -Version: 0.5 -Release: 1%{?dist} Summary: Convert terminal output to HTML - License: MPLv1.1 or LGPLv2+ + +Version: 0.5.1 +Release: 2%{?dist} + URL: https://github.com/theZiz/aha Source0: %{URL}/archive/%{version}/%{name}-%{version}.tar.gz -BuildRequires: gcc make +# Fix a null pointer dereference when interpreting +# invalid 24-bit color code escape sequences. +# +# Submitted upstream: https://github.com/theZiz/aha/pull/97 +Patch0: 0000-fix-null-pointer-dereference.patch + +BuildRequires: gcc +BuildRequires: make %description @@ -17,7 +25,7 @@ and produces an HTML rendition of the original text. %prep -%setup -q +%autosetup -p1 # Extract license header from source code cat aha.c | awk '1;/\*\//{exit}' > LICENSE @@ -38,6 +46,12 @@ cat aha.c | awk '1;/\*\//{exit}' > LICENSE %changelog +* Mon Jul 11 2022 Artur Frenszek-Iwicki - 0.5.1-2 +- Add a patch to fix segfault because of null pointer dereference + +* Mon Sep 14 2020 Artur Frenszek-Iwicki - 0.5.1-1 +- Update to latest upstream release + * Sat Oct 27 2018 Artur Iwicki - 0.5-1 - Update to latest upstream release diff --git a/sources b/sources index 97ad0fa..3141ff5 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (aha-0.5.tar.gz) = 2fbf0be928d8ea0491f6710d96eddd135253cadce6cc8c00f342e03e030ee16a3ff1eb6a559740cdd642b074c9e4e3fd9a76412272ffeb0b7bb419b0dcb6dbc1 +SHA512 (aha-0.5.1.tar.gz) = 0eb88e681208c0956e344d6574f9d7ba155d38bfb386d0a9f17022c5e925fb16d0efb6aa04804191b4cac1697a87a0f16ba51bcd97b6135cc7606046eaf89288