[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#751254: marked as done (sleepd: Integer overflow while calculating battery percentage)



Your message dated Fri, 21 Jun 2024 12:44:00 +0000
with message-id <[🔎] E1sKdcW-00FyGs-31@fasolo.debian.org>
and subject line Bug#1073968: Removed package(s) from unstable
has caused the Debian Bug report #751254,
regarding sleepd: Integer overflow while calculating battery percentage
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact owner@bugs.debian.org
immediately.)


-- 
751254: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=751254
Debian Bug Tracking System
Contact owner@bugs.debian.org with problems
--- Begin Message ---
Package: sleepd
Version: 2.05
Severity: normal
Tags: patch

Dear Maintainer,

*** Reporter, please consider answering these questions, where appropriate ***

   * What led up to the situation?
      My laptop got suspended immediately when the AC power off.

   * What exactly did you do (or not do) that was effective (or
     ineffective)?
     I find the problem: Integer overflow while calculating battery percentage.

   * What was the outcome of this action?
   * What outcome did you expect instead?
      Here is a concrete description: http://kdr2.com/tech/linux/1406-sleepd-
bug-batt-cap.html , and there's a patch in the attachement.


*** End of the template - remove these template lines ***



-- System Information:
Debian Release: jessie/sid
  APT prefers unstable
  APT policy: (500, 'unstable')
Architecture: amd64 (x86_64)
Foreign Architectures: i386

Kernel: Linux 3.10.27 (SMP w/4 CPU cores)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash

Versions of packages sleepd depends on:
ii  libc6            2.19-1
ii  libglib2.0-0     2.40.0-3
ii  libupower-glib1  0.9.23-2+b2
ii  lsb-base         4.1+Debian13

Versions of packages sleepd recommends:
ii  pm-utils  1.4.1-14
ii  upower    0.9.23-2+b2

sleepd suggests no packages.

-- Configuration Files:
/etc/default/sleepd changed [not included]
>From 5eef101c0b5360a6da4219c94d2086008373520b Mon Sep 17 00:00:00 2001
From: KDr2 <killy.draw@gmail.com>
Date: Wed, 11 Jun 2014 18:35:29 +0800
Subject: [PATCH] use int64_t for battery capacity to avoid integer overflow

---
 acpi.c | 14 +++++++-------
 acpi.h |  6 +++---
 2 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/acpi.c b/acpi.c
index 38bf820..417ce67 100644
--- a/acpi.c
+++ b/acpi.c
@@ -27,7 +27,7 @@ char acpi_batt_info[ACPI_MAXITEM][128];
 /* Filenames of the battery status files for each system battery. */
 char acpi_batt_status[ACPI_MAXITEM][128];
 /* Stores battery capacity, or 0 if the battery is absent. */
-int acpi_batt_capacity[ACPI_MAXITEM];
+int64_t acpi_batt_capacity[ACPI_MAXITEM];
 
 int acpi_ac_count = 0;
 char acpi_ac_adapter_info[ACPI_MAXITEM][128];
@@ -86,15 +86,15 @@ int strmcmp(const char *s1, const char *s2)
 
 /* Given a buffer holding an acpi file, searches for the given key in it,
  * and returns the numeric value. 0 is returned on failure. */
-inline int scan_acpi_num (const char *buf, const char *key) {
+inline int64_t scan_acpi_num (const char *buf, const char *key) {
 	char *ptr;
-	int ret = 0;
+	int64_t ret = 0;
 
 	do {
 		ptr = strchr(buf, '\n');
 		if (!strmcmp(buf, key)) {
 			if ((ptr = strchr(buf, '='))) {
-				sscanf(ptr + 1, "%d", &ret);
+				sscanf(ptr + 1, "%ld", &ret);
 				return ret;
 			} else {
 				return 0;
@@ -145,14 +145,14 @@ char *get_acpi_value (const char *file, const char *key) {
 
 /* Returns the last full charge capacity of a battery.
  */
-int get_acpi_batt_capacity(int battery) {
+int64_t get_acpi_batt_capacity(int battery) {
 	char *s;
 
 	s = get_acpi_value(acpi_batt_info[battery], acpi_labels[label_last_full_capacity]);
 	if (s == NULL) {
 		return 0;
 	} else {
-		return atoi(s);
+		return atoll(s);
 	}
 }
 
@@ -327,7 +327,7 @@ int acpi_read (int battery, apm_info *info) {
 	/* Work out if the battery is present, and what percentage of full
 	 * it is and how much time is left. */
 	if (strcmp(scan_acpi_value(buf, acpi_labels[label_present]), "1") == 0) {
-		int pcap = scan_acpi_num(buf, acpi_labels[label_remaining_capacity]);
+		int64_t pcap = scan_acpi_num(buf, acpi_labels[label_remaining_capacity]);
 		state = scan_acpi_value(buf, acpi_labels[label_charging_state]);
 		if (state) {
 			if (state[0] == 'D') { /* discharging */
diff --git a/acpi.h b/acpi.h
index f82cba7..f7c77cc 100644
--- a/acpi.h
+++ b/acpi.h
@@ -20,10 +20,10 @@ int acpi_supported (void);
 int acpi_read (int battery, apm_info *info);
 #endif
 char *get_acpi_file (const char *file);
-int scan_acpi_num (const char *buf, const char *key);
+int64_t scan_acpi_num (const char *buf, const char *key);
 char *scan_acpi_value (const char *buf, const char *key);
 char *get_acpi_value (const char *file, const char *key);
-int get_acpi_batt_capacity(int battery);
+int64_t get_acpi_batt_capacity(int battery);
 
 extern int acpi_batt_count;
 /* Filenames of the battery info files for each system battery. */
@@ -31,7 +31,7 @@ extern char acpi_batt_info[ACPI_MAXITEM][128];
 /* Filenames of the battery status files for each system battery. */
 extern char acpi_batt_status[ACPI_MAXITEM][128];
 /* Stores battery capacity, or 0 if the battery is absent. */
-extern int acpi_batt_capacity[ACPI_MAXITEM];
+extern int64_t acpi_batt_capacity[ACPI_MAXITEM];
 
 extern int acpi_ac_count;
 extern char acpi_ac_adapter_info[ACPI_MAXITEM][128];
-- 
2.0.0


--- End Message ---
--- Begin Message ---
Version: 2.11+rm

Dear submitter,

as the package sleepd has just been removed from the Debian archive
unstable we hereby close the associated bug reports.  We are sorry
that we couldn't deal with your issue properly.

For details on the removal, please see https://bugs.debian.org/1073968

The version of this package that was in Debian prior to this removal
can still be found using https://snapshot.debian.org/.

Please note that the changes have been done on the master archive and
will not propagate to any mirrors until the next dinstall run at the
earliest.

This message was generated automatically; if you believe that there is
a problem with it please contact the archive administrators by mailing
ftpmaster@ftp-master.debian.org.

Debian distribution maintenance software
pp.
Scott Kitterman (the ftpmaster behind the curtain)

--- End Message ---

Reply to: