Package: presage
Followup-For: Bug #984297
User: ubuntu-de...@lists.ubuntu.com
Usertags: origin-ubuntu kinetic ubuntu-patch
X-Debbugs-Cc: scho...@ubuntu.com
Control: tags -1 patch



In Ubuntu, the attached patch was applied to achieve the following:

  * d/p/c++17.patch: fix the build against GCC-11 by porting the code to C++17
    (LP: #1988196)
  * d/p/format-security.patch: fix insecure format strings in the demo code
    (FTBFS on Ubuntu due to -Werror=format-security.patch)

I'm not sure that the second one actually applies in Debian, but
attaching the patch in the debdiff just in case.

Thanks for considering the patch.


-- System Information:
Debian Release: bookworm/sid
  APT prefers jammy-updates
  APT policy: (500, 'jammy-updates'), (500, 'jammy-security'), (500, 'jammy'), 
(100, 'jammy-backports'), (50, 'jammy-proposed')
Architecture: amd64 (x86_64)
Foreign Architectures: i386

Kernel: Linux 5.15.0-46-lowlatency (SMP w/8 CPU threads; PREEMPT)
Kernel taint flags: TAINT_PROPRIETARY_MODULE, TAINT_USER, TAINT_OOT_MODULE
Locale: LANG=fr_FR.UTF-8, LC_CTYPE=fr_FR.UTF-8 (charmap=UTF-8), LANGUAGE not set
Shell: /bin/sh linked to /usr/bin/dash
Init: systemd (via /run/systemd/system)
LSM: AppArmor: enabled
diff -Nru presage-0.9.1/debian/patches/c++17.patch 
presage-0.9.1/debian/patches/c++17.patch
--- presage-0.9.1/debian/patches/c++17.patch    1970-01-01 01:00:00.000000000 
+0100
+++ presage-0.9.1/debian/patches/c++17.patch    2022-08-30 17:56:09.000000000 
+0200
@@ -0,0 +1,239 @@
+Description: Port the code to C++17
+Author: Simon Chopin <scho...@ubuntu.com>
+Origin: ubuntu
+Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=984297
+Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/presage/+bug/1988196
+Last-Update: 2022-08-30
+---
+This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
+--- a/src/lib/presage.h
++++ b/src/lib/presage.h
+@@ -112,7 +112,7 @@
+      * 
+      * Presage does not take ownership of the callback object.
+      */
+-    Presage(PresageCallback* callback) throw (PresageException);
++    Presage(PresageCallback* callback) noexcept(false);
+ 
+ 
+     /** Creates and initializes presage with supplied configuration.
+@@ -122,7 +122,7 @@
+      *
+      * Presage does not take ownership of the callback object.
+      */
+-    Presage(PresageCallback* callback, const std::string config) throw 
(PresageException);
++    Presage(PresageCallback* callback, const std::string config) 
noexcept(false);
+ 
+ 
+     /** Destroys presage.
+@@ -138,7 +138,7 @@
+      * context.
+      *
+      */
+-    std::vector<std::string> predict() throw (PresageException);
++    std::vector<std::string> predict() noexcept(false);
+ 
+     /** \brief Obtain a prediction that matches the supplied token
+      *         filter.
+@@ -153,7 +153,7 @@
+      * of the filter tokens.
+      *
+      */
+-    std::multimap<double, std::string> predict(std::vector<std::string> 
filter) throw (PresageException);
++    std::multimap<double, std::string> predict(std::vector<std::string> 
filter) noexcept(false);
+ 
+     /** \brief Learn from text offline.
+      *
+@@ -167,7 +167,7 @@
+      * \param text a text string to learn from.
+      *
+      */
+-    void learn(const std::string text) const throw (PresageException);
++    void learn(const std::string text) const noexcept(false);
+ 
+     /** \brief Callback getter/setter.
+      *
+@@ -176,7 +176,7 @@
+      *
+      * \return pointer to previously used callback
+      */
+-    PresageCallback* callback(PresageCallback* callback) throw 
(PresageException);
++    PresageCallback* callback(PresageCallback* callback) noexcept(false);
+ 
+     /** \brief Request presage to return the completion string for the given 
predicted token.
+      *
+@@ -190,26 +190,26 @@
+      *
+      * \return completion string
+      */
+-    std::string completion(std::string str) throw (PresageException);
++    std::string completion(std::string str) noexcept(false);
+ 
+     /** \brief Returns the text entered so far.
+      *
+      * \return context, text entered so far.
+      */
+-    std::string context() const throw (PresageException);
++    std::string context() const noexcept(false);
+ 
+     /** \brief Returns true if a context change occured.
+      *
+      * \return true if a context change occured after the last update
+      * or predict calls, or false otherwise.
+      */
+-    bool context_change() const throw (PresageException);
++    bool context_change() const noexcept(false);
+ 
+     /** \brief Returns the current prefix.
+      *
+      * \return prefix
+      */
+-    std::string prefix() const throw (PresageException);
++    std::string prefix() const noexcept(false);
+ 
+     /** \brief Gets the value of specified configuration variable.
+      *
+@@ -218,7 +218,7 @@
+      *
+      * \return value assigned to configuration variable.
+      */
+-    std::string config(const std::string variable) const throw 
(PresageException);
++    std::string config(const std::string variable) const noexcept(false);
+ 
+     /** \brief Sets the value of specified configuration variable.
+      *
+@@ -227,7 +227,7 @@
+      * from the configuration file in use.
+      *
+      */
+-    void config(const std::string variable, const std::string value) const 
throw (PresageException);
++    void config(const std::string variable, const std::string value) const 
noexcept(false);
+ 
+     /** \brief Save current configuration to file.
+      *
+@@ -236,7 +236,7 @@
+      * active XML profile.
+      *
+      */
+-    void save_config() const throw (PresageException);
++    void save_config() const noexcept(false);
+ 
+     /*
+      * Presage public API ends here
+--- a/src/lib/presage.cpp
++++ b/src/lib/presage.cpp
+@@ -31,7 +31,7 @@
+ #include "core/predictorActivator.h"
+ 
+ Presage::Presage (PresageCallback* callback)
+-    throw (PresageException)
++    noexcept(false)
+ {
+     profileManager = new ProfileManager();
+     configuration = profileManager->get_configuration();
+@@ -42,7 +42,7 @@
+ }
+ 
+ Presage::Presage (PresageCallback* callback, const std::string 
config_filename)
+-    throw (PresageException)
++    noexcept(false)
+ {
+     profileManager = new ProfileManager(config_filename);
+     configuration = profileManager->get_configuration();
+@@ -62,7 +62,7 @@
+ }
+ 
+ std::vector<std::string> Presage::predict ()
+-    throw (PresageException)
++    noexcept(false)
+ {
+     std::vector<std::string> result;
+ 
+@@ -88,7 +88,7 @@
+ }
+ 
+ std::multimap<double, std::string> Presage::predict (std::vector<std::string> 
filter)
+-    throw (PresageException)
++    noexcept(false)
+ {
+     std::multimap<double, std::string> result;
+ 
+@@ -137,20 +137,20 @@
+ }
+ 
+ void Presage::learn(const std::string text) const
+-    throw (PresageException)
++    noexcept(false)
+ {
+     contextTracker->learn(text); // TODO: can pass additional param to
+                                // learn to specify offline learning
+ }
+ 
+ PresageCallback* Presage::callback (PresageCallback* callback)
+-    throw (PresageException)
++    noexcept(false)
+ {
+     return const_cast<PresageCallback*>(contextTracker->callback(callback));
+ }
+ 
+ std::string Presage::completion (const std::string str)
+-    throw (PresageException)
++    noexcept(false)
+ {
+     // There are two types of completions: normal and erasing.
+     // normal_completion  = prefix + remainder
+@@ -198,37 +198,37 @@
+ }
+ 
+ std::string Presage::context () const
+-    throw (PresageException)
++    noexcept(false)
+ {
+     return contextTracker->getPastStream();
+ }
+ 
+ bool Presage::context_change () const
+-    throw (PresageException)
++    noexcept(false)
+ {
+     return contextTracker->contextChange();
+ }
+ 
+ std::string Presage::prefix () const
+-    throw (PresageException)
++    noexcept(false)
+ {
+     return contextTracker->getPrefix();
+ }
+ 
+ std::string Presage::config (const std::string variable) const
+-    throw (PresageException)
++    noexcept(false)
+ {
+     return configuration->find (variable)->get_value ();
+ }
+ 
+ void Presage::config (const std::string variable, const std::string value) 
const
+-    throw (PresageException)
++    noexcept(false)
+ {
+     configuration->insert (variable, value);
+ }
+ 
+ void Presage::save_config () const
+-    throw (PresageException)
++    noexcept(false)
+ {
+     profileManager->save_profile ();
+ }
+--- presage-0.9.1.orig/apps/gtk/gprompter/scintilla/gtk/ScintillaGTK.cxx
++++ presage-0.9.1/apps/gtk/gprompter/scintilla/gtk/ScintillaGTK.cxx
+@@ -1626,7 +1626,7 @@ void ScintillaGTK::ReceivedDrop(GtkSelec
+               drop.push_back('\0');
+               NotifyURIDropped(&drop[0]);
+       } else if ((TypeOfGSD(selection_data) == GDK_TARGET_STRING) || 
(TypeOfGSD(selection_data) == atomUTF8)) {
+-              if (TypeOfGSD(selection_data) > 0) {
++              if (TypeOfGSD(selection_data)) {
+                       SelectionText selText;
+                       GetGtkSelectionText(selection_data, selText);
+                       DropAt(posDrop, selText.Data(), selText.Length(), 
false, selText.rectangular);
diff -Nru presage-0.9.1/debian/patches/format-security.patch 
presage-0.9.1/debian/patches/format-security.patch
--- presage-0.9.1/debian/patches/format-security.patch  1970-01-01 
01:00:00.000000000 +0100
+++ presage-0.9.1/debian/patches/format-security.patch  2022-08-30 
17:56:09.000000000 +0200
@@ -0,0 +1,52 @@
+Description: Fix insecure format strings in the demo code
+Author: Simon Chopin <scho...@ubuntu.com>
+Origin: ubuntu
+Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/presage/+bug/1988196
+Last-Update: 2022-08-30
+--- a/src/tools/presageDemo.cpp
++++ b/src/tools/presageDemo.cpp
+@@ -173,7 +173,7 @@
+           // key corresponding to desired token. selecting
+           // suggestion.
+           std::string message = "Last selected word: " + words[c - KEY_F0 - 
1];
+-          mvprintw(LINES - 3, 0, message.c_str());
++          mvprintw(LINES - 3, 0, "%s", message.c_str());
+             clrtoeol();
+           move(LINES, COLS);
+ 
+@@ -213,7 +213,7 @@
+ {
+     wclear( win );
+     box( win, 0, 0 );
+-    mvwprintw( win, 1, 1, str.c_str() );
++    mvwprintw( win, 1, 1, "%s", str.c_str() );
+     wrefresh( win );
+ }
+ 
+@@ -226,7 +226,7 @@
+     int i = 1;
+     std::vector<std::string>::const_iterator j = words.begin();
+     while( j != words.end() ) {
+-      mvwprintw( win, i, 1, j->c_str() );
++      mvwprintw( win, i, 1, "%s", j->c_str() );
+       i++;
+       j++;
+     }
+@@ -241,7 +241,7 @@
+     for (int i = 1; i <= atoi(suggestions.c_str()); i++) {
+         std::stringstream ss;
+         ss << 'F' << i;
+-        mvwprintw(win, i, 1, ss.str().c_str());
++        mvwprintw(win, i, 1, "%s", ss.str().c_str());
+     }
+     wrefresh(win);
+ }
+@@ -291,7 +291,7 @@
+            strit != listit->end();
+            strit++) {
+           
+-          mvwprintw(win, line, 1, strit->c_str());
++          mvwprintw(win, line, 1, "%s", strit->c_str());
+           line++;
+       }
+ 
diff -Nru presage-0.9.1/debian/patches/series 
presage-0.9.1/debian/patches/series
--- presage-0.9.1/debian/patches/series 2020-02-08 19:18:10.000000000 +0100
+++ presage-0.9.1/debian/patches/series 2022-08-30 17:52:55.000000000 +0200
@@ -5,3 +5,5 @@
 add_presage_config_environment_variable.patch
 add-missing-online-learning-configuration-value.patch
 python.diff
+c++17.patch
+format-security.patch

Reply via email to