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 d5c3147..c67fa1e 100644 --- a/aha.spec +++ b/aha.spec @@ -1,13 +1,21 @@ Name: aha -Version: 0.5.1 -Release: 3%{?dist} Summary: Convert terminal output to HTML - License: MPLv1.1 or LGPLv2+ + +Version: 0.5.1 +Release: 4%{?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,9 @@ cat aha.c | awk '1;/\*\//{exit}' > LICENSE %changelog +* Mon Jul 11 2022 Artur Frenszek-Iwicki - 0.5.1-4 +- Add a patch to fix segfault because of null pointer dereference + * Wed Jul 21 2021 Fedora Release Engineering - 0.5.1-3 - Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild