Package: acpitool
Version: 0.5.1-3
Tags: patch

While parsing /proc/acpi/wakeup, src/acpitool.cpp assumes that lines are
maximum 39 char long (40 including the terminating NUL character at the
end of C strings).

Since I have a line in /proc/acpi/wakeup that is exactly 40 char long,
the tool doesn't work (it hangs up when it hits that line, consuming
100% CPU forever).

The attached patch changes this behavior to assume maximum 79 char long
lines by increasing the buffer size to 80.

diff -ur acpitool-0.5.1/debian/patches/wakeup.patch acpitool-0.5.1.patched/debian/patches/wakeup.patch
--- acpitool-0.5.1/debian/patches/wakeup.patch	2014-09-26 10:20:52.000000000 +0200
+++ acpitool-0.5.1.patched/debian/patches/wakeup.patch	2014-09-26 10:16:07.163701983 +0200
@@ -13,15 +13,44 @@
    have a device called "LID" which is 3 characters long.
    Instead of using a fixed size for the device we split the line
    on the first tab (\t) and use the first part.
+
+ * The length of lines in /proc/acpi/wakeup can have more than 39
+   characters, I have one with exactly 40.  So let's increase the
+   reading buffer to 80 characters.
 ---
  src/acpitool.cpp |   23 +++++++++++------------
  1 files changed, 11 insertions(+), 12 deletions(-)
 
-diff --git a/src/acpitool.cpp b/src/acpitool.cpp
-index 2a610a5..71e01d7 100644
---- a/src/acpitool.cpp
-+++ b/src/acpitool.cpp
-@@ -460,16 +460,14 @@ int Show_WakeUp_Devices(int verbose)
+Index: acpitool-0.5.1/src/acpitool.cpp
+===================================================================
+--- acpitool-0.5.1.orig/src/acpitool.cpp
++++ acpitool-0.5.1/src/acpitool.cpp
+@@ -416,7 +416,7 @@ int Do_Fan_Info(int verbose)
+ int Show_WakeUp_Devices(int verbose)
+ {
+     ifstream file_in;
+-    char *filename, str[40];
++    char *filename, str[80];
+     
+     filename = "/proc/acpi/wakeup";
+     
+@@ -437,13 +437,13 @@ int Show_WakeUp_Devices(int verbose)
+     }
+     else
+     {
+-	file_in.getline(str, 40);           // first line are just headers //
++	file_in.getline(str, 80);           // first line are just headers //
+ 	cout<<"   "<<str<<endl;
+ 	cout<<"  ---------------------------------------"<<endl;
+         int t = 1;
+ 	while(!file_in.eof())
+ 	{
+-	    file_in.getline(str, 40);
++	    file_in.getline(str, 80);
+ 	    if (strlen(str)!=0)                     // avoid printing last empty line //
+ 	    {
+ 		cout<<"  "<<t<<". "<<str<<endl;
+@@ -459,16 +459,14 @@ int Show_WakeUp_Devices(int verbose)
  
  int Toggle_WakeUp_Device(const int Device, int verbose)
  {
@@ -43,7 +72,7 @@
      {
      	if(!verbose)        
      	{
-@@ -484,14 +482,15 @@ int Toggle_WakeUp_Device(const int Device, int verbose)
+@@ -483,14 +481,15 @@ int Toggle_WakeUp_Device(const int Devic
      	}	
      }
      
@@ -64,7 +93,3 @@
  	    index++;
  	}
      }	
--- 
-1.7.5.4
-
-

Reply via email to