Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package no-more-secrets for openSUSE:Factory 
checked in at 2021-09-27 20:08:47
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/no-more-secrets (Old)
 and      /work/SRC/openSUSE:Factory/.no-more-secrets.new.1899 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "no-more-secrets"

Mon Sep 27 20:08:47 2021 rev:4 rq:921534 version:1.0.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/no-more-secrets/no-more-secrets.changes  
2018-01-09 14:54:52.003094978 +0100
+++ 
/work/SRC/openSUSE:Factory/.no-more-secrets.new.1899/no-more-secrets.changes    
    2021-09-27 20:08:56.642464478 +0200
@@ -1,0 +2,16 @@
+Sun Sep 26 21:03:04 UTC 2021 - Michael Vetter <mvet...@suse.com>
+
+- Update to 1.0.1:
+  * Updated output for nms -v to match release version.
+
+-------------------------------------------------------------------
+Sun Sep 26 21:02:39 UTC 2021 - Michael Vetter <mvet...@suse.com>
+
+- Update to 1.0.0:
+  * Added cyan for color output.
+  * Fixed issues with the ncurses implementation.
+  * Improved code for getting input and error reporting.
+  * Turned on optimizations for the c compiler.
+  * Various other small code improvements and small bug/typo fixes.
+
+-------------------------------------------------------------------

Old:
----
  no-more-secrets-0.3.3.tar.gz

New:
----
  no-more-secrets-1.0.1.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ no-more-secrets.spec ++++++
--- /var/tmp/diff_new_pack.OML3W9/_old  2021-09-27 20:08:57.206465099 +0200
+++ /var/tmp/diff_new_pack.OML3W9/_new  2021-09-27 20:08:57.210465104 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package no-more-secrets
 #
-# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2021 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -12,17 +12,17 @@
 # license that conforms to the Open Source Definition (Version 1.9)
 # published by the Open Source Initiative.
 
-# Please submit bugfixes or comments via http://bugs.opensuse.org/
+# Please submit bugfixes or comments via https://bugs.opensuse.org/
 #
 
 
 Name:           no-more-secrets
-Version:        0.3.3
+Version:        1.0.1
 Release:        0
 Summary:        A recreation of the "decrypting text" effect from the 1992 
movie Sneakers
-License:        GPL-3.0+
+License:        GPL-3.0-or-later
 Group:          Amusements/Toys/Other
-Url:            https://github.com/bartobri/%{name}
+URL:            https://github.com/bartobri/%{name}
 Source0:        
https://github.com/bartobri/%{name}/archive/v%{version}/%{name}-%{version}.tar.gz
 BuildRequires:  ncurses-devel
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build

++++++ no-more-secrets-0.3.3.tar.gz -> no-more-secrets-1.0.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/no-more-secrets-0.3.3/.gitignore 
new/no-more-secrets-1.0.1/.gitignore
--- old/no-more-secrets-0.3.3/.gitignore        2017-09-20 15:15:04.000000000 
+0200
+++ new/no-more-secrets-1.0.1/.gitignore        2021-09-24 21:02:46.000000000 
+0200
@@ -1,2 +1,3 @@
 bin/*
 obj/*
+.vs
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/no-more-secrets-0.3.3/Makefile 
new/no-more-secrets-1.0.1/Makefile
--- old/no-more-secrets-0.3.3/Makefile  2017-09-20 15:15:04.000000000 +0200
+++ new/no-more-secrets-1.0.1/Makefile  2021-09-24 21:02:46.000000000 +0200
@@ -13,11 +13,11 @@
 SRC=src
 
 CC ?= gcc
-CFLAGS ?= -Wextra -Wall
+CFLAGS ?= -Wextra -Wall -O2
 
 .PHONY: all install uninstall clean
 
-nms: $(OBJ)/nmscharset.o $(OBJ)/nmstermio.o $(OBJ)/nmseffect.o $(OBJ)/nms.o | 
$(BIN)
+nms: $(OBJ)/input.o $(OBJ)/error.o $(OBJ)/nmscharset.o $(OBJ)/nmstermio.o 
$(OBJ)/nmseffect.o $(OBJ)/nms.o | $(BIN)
        $(CC) $(CFLAGS) -o $(BIN)/$@ $^
 
 sneakers: $(OBJ)/nmscharset.o $(OBJ)/nmstermio.o $(OBJ)/nmseffect.o 
$(OBJ)/sneakers.o | $(BIN)
@@ -27,11 +27,11 @@
 
 all-ncurses: nms-ncurses sneakers-ncurses
 
-nms-ncurses: $(OBJ)/nmscharset.o $(OBJ)/nmstermio_ncurses.o $(OBJ)/nmseffect.o 
$(OBJ)/nms.o | $(BIN)
-       $(CC) $(CFLAGS) -o $(BIN)/nms $^ -lncurses
+nms-ncurses: $(OBJ)/input.o $(OBJ)/error.o $(OBJ)/nmscharset.o 
$(OBJ)/nmstermio_ncurses.o $(OBJ)/nmseffect.o $(OBJ)/nms.o | $(BIN)
+       $(CC) $(CFLAGS) -o $(BIN)/nms $^ -lncursesw
 
 sneakers-ncurses: $(OBJ)/nmscharset.o $(OBJ)/nmstermio_ncurses.o 
$(OBJ)/nmseffect.o $(OBJ)/sneakers.o | $(BIN)
-       $(CC) $(CFLAGS) -o $(BIN)/sneakers $^ -lncurses
+       $(CC) $(CFLAGS) -o $(BIN)/sneakers $^ -lncursesw
 
 $(OBJ)/%.o: $(SRC)/%.c | $(OBJ)
        $(CC) $(CFLAGS) -o $@ -c $<
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/no-more-secrets-0.3.3/NCURSES.md 
new/no-more-secrets-1.0.1/NCURSES.md
--- old/no-more-secrets-0.3.3/NCURSES.md        2017-09-20 15:15:04.000000000 
+0200
+++ new/no-more-secrets-1.0.1/NCURSES.md        2021-09-24 21:02:46.000000000 
+0200
@@ -8,7 +8,7 @@
 
 ```
 sudo apt-get update
-sudo apt-get install lib32ncurses5-dev
+sudo apt-get install lib32ncursesw5-dev
 ```
 
 #### Fedora Linux
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/no-more-secrets-0.3.3/README.md 
new/no-more-secrets-1.0.1/README.md
--- old/no-more-secrets-0.3.3/README.md 2017-09-20 15:15:04.000000000 +0200
+++ new/no-more-secrets-1.0.1/README.md 2021-09-24 21:02:46.000000000 +0200
@@ -8,8 +8,8 @@
 For reference, you can see this effect at 0:35 in [this movie 
clip](https://www.youtube.com/watch?v=F5bAa6gFvLs&t=35).
 
 This command works on piped data. Pipe any ASCII or UTF-8 text to `nms`,
-and it will apply the hollywood effect, initially showing encrypted data,
-then starting a decryption sequence to reveal the original plaintext 
characters.
+and it will apply the Hollywood effect, initially showing encrypted data,
+then starting a decryption sequence to reveal the original plain-text 
characters.
 
 ![Screenshot](http://www.brianbarto.info/extern/images/nms/nms.gif)
 
@@ -38,9 +38,9 @@
 Download and Install
 --------------------
 
-More and more unix/linux platforms are including this project in their
+More and more Unix/Linux platforms are including this project in their
 package manager. You may wish to search your package manager to see if it
-is an installation option. If you install form a package manager, please
+is an installation option. If you install from a package manager, please
 check that you have the latest version (`nms -v`). If not, I suggest
 installing from source by following the instructions below.
 
@@ -121,7 +121,7 @@
 
 Clear the screen prior to printing any output. Specifically,
 it saves the state of the terminal (all current output), and restores it
-once the effect is comlpeted. Note that when using this option, `nms` requires
+once the effect is completed. Note that when using this option, `nms` requires
 the user to press a key before restoring the terminal.
 
 `-v`
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/no-more-secrets-0.3.3/nms.6 
new/no-more-secrets-1.0.1/nms.6
--- old/no-more-secrets-0.3.3/nms.6     2017-09-20 15:15:04.000000000 +0200
+++ new/no-more-secrets-1.0.1/nms.6     2021-09-24 21:02:46.000000000 +0200
@@ -22,7 +22,7 @@
 .TP
 .BI -f <COLOR>
 set the foreground color of the decrypted text to the color specified.
-Valid options are white, yellow, black, magenta, blue (default), green, or red.
+Valid options are white, black, yellow, magenta, cyan, blue (default), green, 
or red.
 .SH DESCRIPTION
 This command works on piped data. Pipe any ASCII or UTF-8 text to nms,
 and it will apply the hollywood effect, seen on screen in the 1992 hacker 
movie Sneakers.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/no-more-secrets-0.3.3/src/error.c 
new/no-more-secrets-1.0.1/src/error.c
--- old/no-more-secrets-0.3.3/src/error.c       1970-01-01 01:00:00.000000000 
+0100
+++ new/no-more-secrets-1.0.1/src/error.c       2021-09-24 21:02:46.000000000 
+0200
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2017 Brian Barto
+ * 
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GPL License. See LICENSE for more details.
+ */
+
+#include <stdio.h>
+#include <stddef.h>
+#include <stdarg.h>
+
+#define ERROR_LIST_MAX         20
+#define ERROR_LENGTH_MAX       100
+
+static char error_stack[ERROR_LIST_MAX][ERROR_LENGTH_MAX];
+static int N = 0;
+
+void error_log(char *error, ...)
+{
+       va_list argList;
+
+       if (N < ERROR_LIST_MAX)
+       {
+               va_start(argList, error);
+               vsnprintf(error_stack[N++], ERROR_LENGTH_MAX - 1, error, 
argList);
+               va_end(argList);
+       }
+}
+
+void error_print(void)
+{
+       int i;
+
+       for (i = N-1; i >= 0; --i)
+       {
+               fprintf(stderr, "%s ", error_stack[i]);
+       }
+       fprintf(stderr, "\n");
+}
+
+char *error_get(void)
+{
+       if (N > 0)
+       {
+               return error_stack[--N];
+       }
+       else
+       {
+               return NULL;
+       }
+}
+
+void error_clear(void)
+{
+       N = 0;
+}
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/no-more-secrets-0.3.3/src/error.h 
new/no-more-secrets-1.0.1/src/error.h
--- old/no-more-secrets-0.3.3/src/error.h       1970-01-01 01:00:00.000000000 
+0100
+++ new/no-more-secrets-1.0.1/src/error.h       2021-09-24 21:02:46.000000000 
+0200
@@ -0,0 +1,16 @@
+/*
+ * Copyright (c) 2017 Brian Barto
+ * 
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GPL License. See LICENSE for more details.
+ */
+
+#ifndef ERROR_H
+#define ERROR_H 1
+
+void error_log(char *, ...);
+void error_print(void);
+char *error_get(void);
+void error_clear(void);
+
+#endif
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/no-more-secrets-0.3.3/src/input.c 
new/no-more-secrets-1.0.1/src/input.c
--- old/no-more-secrets-0.3.3/src/input.c       1970-01-01 01:00:00.000000000 
+0100
+++ new/no-more-secrets-1.0.1/src/input.c       2021-09-24 21:02:46.000000000 
+0200
@@ -0,0 +1,166 @@
+/*
+ * Copyright (c) 2017 Brian Barto
+ * 
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GPL License. See LICENSE for more details.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <ctype.h>
+#include <string.h>
+#include <sys/ioctl.h>
+#include <sys/select.h>
+#include <time.h>
+#include <errno.h>
+#include "input.h"
+#include "error.h"
+
+int input_get(unsigned char** dest, char *prompt)
+{
+       int r, input_len;
+       fd_set input_stream;
+       struct timeval timeout;
+       void *timeout_p;
+
+       FD_ZERO(&input_stream);
+       input_len = 0;
+
+       timeout.tv_sec  = 10;
+       timeout.tv_usec = 0;
+
+       if (isatty(STDIN_FILENO))
+       {
+               timeout_p = NULL;
+               if (prompt != NULL)
+               {
+                       printf("%s", prompt);
+                       fflush(stdout);
+               }
+       }
+       else
+       {
+               timeout_p = &timeout;
+       }
+
+       FD_SET(STDIN_FILENO, &input_stream);
+       r = select(FD_SETSIZE, &input_stream, NULL, NULL, timeout_p);
+       if (r < 0)
+       {
+               error_log("Error while waiting for input data. Errno: %i", 
errno);
+               return -1;
+       }
+       if (r > 0)
+       {
+               r = ioctl(STDIN_FILENO, FIONREAD, &input_len);
+               if (r < 0)
+               {
+                       error_log("Could not determine length of input. Errno: 
%i", errno);
+                       return -1;
+               }
+               if (input_len > 0)
+               {
+                       *dest = malloc(input_len);
+                       if (*dest == NULL)
+                       {
+                               error_log("Memory allocation error.");
+                               return -1;
+                       }
+                       r = read(STDIN_FILENO, *dest, input_len);
+                       if (r < 0)
+                       {
+                               error_log("Input read error. Errno: %i", errno);
+                               return -1;
+                       }
+               }
+       }
+
+       FD_CLR(STDIN_FILENO, &input_stream);
+
+       return input_len;
+}
+
+int input_get_str(char** dest, char *prompt)
+{
+       int r, i, input_len;
+       unsigned char *input;
+
+       r = input_get(&input, prompt);
+       if (r < 0)
+       {
+               error_log("Could not get input.");
+               return -1;
+       }
+
+       if (r > 0)
+       {
+               if (input[r - 1] == '\n')
+               {
+                       --r;
+                       if (r > 0 && input[r - 1] == '\r')
+                       {
+                               --r;
+                       }
+               }
+       }
+
+       if (r == 0)
+       {
+               error_log("No input provided.");
+               return -1;
+       }
+
+       input_len = r;
+
+       *dest = malloc(input_len + 1);
+       if (*dest == NULL)
+       {
+               error_log("Memory allocation error.");
+               return -1;
+       }
+
+       memset(*dest, 0, input_len + 1);
+
+       for (i = 0; i < input_len; ++i)
+       {
+               if (isascii(input[i]))
+               {
+                       (*dest)[i] = input[i];
+               }
+               else
+               {
+                       error_log("Input contains non-ascii characters.");
+                       return -1;
+               }
+       }
+
+       free(input);
+
+       return input_len;
+}
+
+int input_get_from_pipe(unsigned char** dest)
+{
+       int r;
+
+       if (isatty(STDIN_FILENO))
+       {
+               error_log("Input data from a piped or redirected source is 
required.");
+               return -1;
+       }
+
+       r = input_get(dest, NULL);
+       if (r < 0)
+       {
+               error_log("Could not get input.");
+               return -1;
+       }
+       if (r == 0)
+       {
+               error_log("No input provided.");
+               return -1;
+       }
+
+       return r;
+}
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/no-more-secrets-0.3.3/src/input.h 
new/no-more-secrets-1.0.1/src/input.h
--- old/no-more-secrets-0.3.3/src/input.h       1970-01-01 01:00:00.000000000 
+0100
+++ new/no-more-secrets-1.0.1/src/input.h       2021-09-24 21:02:46.000000000 
+0200
@@ -0,0 +1,15 @@
+/*
+ * Copyright (c) 2017 Brian Barto
+ * 
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GPL License. See LICENSE for more details.
+ */
+
+#ifndef INPUT_H
+#define INPUT_H 1
+
+int input_get(unsigned char** dest, char *prompt);
+int input_get_str(char** dest, char *prompt);
+int input_get_from_pipe(unsigned char** dest);
+
+#endif
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/no-more-secrets-0.3.3/src/nms.c 
new/no-more-secrets-1.0.1/src/nms.c
--- old/no-more-secrets-0.3.3/src/nms.c 2017-09-20 15:15:04.000000000 +0200
+++ new/no-more-secrets-1.0.1/src/nms.c 2021-09-24 21:02:46.000000000 +0200
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 Brian Barto
- * 
+ *
  * This program is free software; you can redistribute it and/or modify it
  * under the terms of the GPL License. See LICENSE for more details.
  */
@@ -10,67 +10,68 @@
 #include <unistd.h>
 #include <ctype.h>
 #include "nmseffect.h"
+#include "input.h"
+#include "error.h"
 
-#define VERSION                "0.3.3"
-#define INITIAL_CAPACITY       50
-#define INPUT_GROWTH_FACTOR    2
-
-int main(int argc, char *argv[]) {
-       int c, o, i, inCapacity = INITIAL_CAPACITY;
-       char *input = NULL;
-
-       // Processing command arguments
-       while ((o = getopt(argc, argv, "f:ascv")) != -1) {
-               switch (o) {
+#define VERSION "1.0.1"
+
+int main(int argc, char *argv[])
+{
+       int r, o;
+       unsigned char *input;
+
+       input = NULL;
+
+       while ((o = getopt(argc, argv, "f:ascv")) != -1)
+       {
+               switch (o)
+               {
                        case 'f':
                                nmseffect_set_foregroundcolor(optarg);
                                break;
                        case 'a':
                                nmseffect_set_autodecrypt(1);
                                break;
-            case 's':
-                nmseffect_set_maskblank(1);
-                break;
+                       case 's':
+                               nmseffect_set_maskblank(1);
+                               break;
                        case 'c':
                                nmseffect_set_clearscr(1);
                                break;
                        case 'v':
                                printf("nms version " VERSION "\n");
-                               return 0;
+                               return EXIT_SUCCESS;
                        case '?':
                                if (isprint(optopt))
-                                       fprintf (stderr, "Unknown option 
'-%c'.\n", optopt);
+                               {
+                                       error_log("Unknown option '-%c'.", 
optopt);
+                               }
                                else
-                                       fprintf (stderr, "Unknown option 
character '\\x%x'.\n", optopt);
-                               return 1;
+                               {
+                                       error_log("Unknown option character 
'\\x%x'.", optopt);
+                               }
+                               error_print();
+                               return EXIT_FAILURE;
                }
        }
-       
-       // Allocate memory for our input buffer
-       if ((input = malloc(inCapacity + 1)) == NULL) {
-               fprintf (stderr, "Memory Allocation Error! Quitting...\n");
-               return 1;
-       }
 
-       // Geting input
-       for (i = 0; (c = getchar()) != EOF; ++i) {
-               if (i >= inCapacity) {
-                       inCapacity *= INPUT_GROWTH_FACTOR;
-                       input = realloc(input, inCapacity + 1);
-                       if (input == NULL) {
-                               fprintf (stderr, "Memory Allocation Error! 
Quitting...\n");
-                               return 1;
-                       }
-               }
-               input[i] = c;
-               input[i+1] = '\0';
+       r = input_get(&input, "Enter input: ");
+       if (r < 0)
+       {
+               error_log("Could not get input.");
+               error_print();
+               return EXIT_FAILURE;
+       }
+       else if (r == 0)
+       {
+               error_log("Input is empty.");
+               error_print();
+               return EXIT_FAILURE;
        }
 
-       // Execute effect
-       c = nmseffect_exec(input);
+       r = nmseffect_exec(input, r);
 
-       // Free allocated memory (not necessary here, but good practice)
        free(input);
 
-       return 0;
+       return EXIT_SUCCESS;
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/no-more-secrets-0.3.3/src/nmseffect.c 
new/no-more-secrets-1.0.1/src/nmseffect.c
--- old/no-more-secrets-0.3.3/src/nmseffect.c   2017-09-20 15:15:04.000000000 
+0200
+++ new/no-more-secrets-1.0.1/src/nmseffect.c   2021-09-24 21:02:46.000000000 
+0200
@@ -32,12 +32,9 @@
 #define REVEAL_LOOP_SPEED    50    // miliseconds between each reveal loop
 
 // Behavior settings
-static char *returnOpts     = NULL;         // Return option setting
 static int autoDecrypt      = 0;            // Auto-decrypt flag
 static int maskBlank        = 0;            // Mask blank spaces
 static int colorOn          = 1;            // Terminal color flag
-static int inputPositionX   = -1;           // X coordinate for input position
-static int inputPositionY   = -1;           // Y coordinate for input position
 
 // Character attribute structure, linked list. Keeps track of every
 // character's attributes required for rendering and decryption effect.
@@ -58,25 +55,13 @@
  * string that is provided as an argument. It returns the last character
  * pressed by the user.
  */
-char nmseffect_exec(char *string) {
+char nmseffect_exec(unsigned char *string, int string_len) {
        struct charAttr *list_pointer = NULL;
        struct charAttr *list_head    = NULL;
        struct charAttr *list_temp    = NULL;
-       int i, revealed = 0;
+       int i, l, revealed = 0;
        int maxRows, maxCols, curRow, curCol, origRow = 0, origCol = 0;
        char ret = 0;
-
-       // Error if we have an empty string.
-       if (string == NULL || string[0] == '\0') {
-               fprintf(stderr, "Error. Empty string.\n");
-               return 0;
-       }
-       
-       // Reassociate STDIN to the terminal if needed
-       if (!isatty(STDIN_FILENO) && !freopen ("/dev/tty", "r", stdin)) {
-               fprintf(stderr, "Error. Can't associate STDIN with 
terminal.\n");
-               return 0;
-       }
        
        // Needed for UTF-8 support
        setlocale(LC_ALL, "");
@@ -108,8 +93,8 @@
        curCol = origCol;
 
        // Processing input
-       for (i = 0; string[i] != '\0'; ++i) {
-               
+       for (i = 0; i < string_len; ++i) {
+
                // Don't go beyond maxRows
                if (curRow - origRow >= maxRows - 1) {
                        break;
@@ -125,11 +110,12 @@
                }
 
                // Get character's byte-length and store character.
-               if (mblen(&string[i], 4) > 0) {
-                       list_pointer->source = malloc(mblen(&string[i], 4) + 1);
-                       strncpy(list_pointer->source, &string[i], 
mblen(&string[i], 4));
-                       list_pointer->source[mblen(&string[i], 4)] = '\0';
-                       i += (mblen(&string[i], 4) - 1);
+               l = mblen((char *)&string[i], 4);
+               if (l > 0) {
+                       list_pointer->source = malloc(l + 1);
+                       memcpy(list_pointer->source, &string[i], l);
+                       list_pointer->source[l] = '\0';
+                       i += (l - 1);
                } else {
                        fprintf(stderr, "Unknown character encountered. 
Quitting.\n");
                        nmstermio_restore_terminal();
@@ -283,29 +269,9 @@
                nmseffect_sleep(REVEAL_LOOP_SPEED);
        }
 
-       // Flush any input up to this point
        nmstermio_clear_input();
-
-       // Check if user must select from a set of options
-       if (returnOpts != NULL && strlen(returnOpts) > 0) {
-               
-               // Position cursor if necessary
-               if (inputPositionY >= 0 && inputPositionX >= 0) {
-                       nmstermio_move_cursor(inputPositionY, inputPositionX);
-               }
-               
-               nmstermio_show_cursor();
-               
-               // Get and validate user selection
-               while (strchr(returnOpts, ret = nmstermio_get_char()) == NULL) {
-                       nmstermio_beep();
-               }
-
-       }
        
-       // User must press a key to continue when clearSrc is set
-       // without returnOpts
-       else if (nmstermio_get_clearscr()) {
+       if (nmstermio_get_clearscr()) {
                nmstermio_get_char();
        }
        
@@ -335,18 +301,6 @@
 }
 
 /*
- * Copy the string argument to the 'returnOpts' variable. This string is
- * used to determine what character the user must choose from before
- * nmseffect_exec() returns execution to the calling function. Normally
- * this is left NULL. Use only when you want to present a menu with
- * selection choices to the user.
- */
-void nmseffect_set_returnopts(char *opts) {
-       returnOpts = realloc(returnOpts, strlen(opts) + 1);
-       strcpy(returnOpts, opts);
-}
-
-/*
  * Set the autoDecrypt flag according to the true/false value of the
  * 'setting' argument. When set to true, nmseffect_exec() will not
  * require a key press to start the decryption effect.
@@ -394,18 +348,6 @@
 }
 
 /*
- * Set the desired coordinates of the cursor in the terminal window when
- * nmseffect_exec() gets the character selection from the user that is set
- * with nmseffect_set_returnopts().
- */
-void nmseffect_set_input_position(int x, int y) {
-       if (x >= 0 && y >= 0) {
-               inputPositionX = x;
-               inputPositionY = y;
-       }
-}
-
-/*
  * Sleep for the number of milliseconds indicated by argument 't'.
  */
 static void nmseffect_sleep(int t) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/no-more-secrets-0.3.3/src/nmseffect.h 
new/no-more-secrets-1.0.1/src/nmseffect.h
--- old/no-more-secrets-0.3.3/src/nmseffect.h   2017-09-20 15:15:04.000000000 
+0200
+++ new/no-more-secrets-1.0.1/src/nmseffect.h   2021-09-24 21:02:46.000000000 
+0200
@@ -9,7 +9,7 @@
 #define NMSEFFECT_H 1
 
 // Function prototypes
-char nmseffect_exec(char *);
+char nmseffect_exec(unsigned char *, int string_len);
 void nmseffect_set_foregroundcolor(char *);
 void nmseffect_set_returnopts(char *);
 void nmseffect_set_autodecrypt(int);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/no-more-secrets-0.3.3/src/nmstermio.c 
new/no-more-secrets-1.0.1/src/nmstermio.c
--- old/no-more-secrets-0.3.3/src/nmstermio.c   2017-09-20 15:15:04.000000000 
+0200
+++ new/no-more-secrets-1.0.1/src/nmstermio.c   2021-09-24 21:02:46.000000000 
+0200
@@ -257,14 +257,14 @@
  * reading/parsing its response.
  */
 int nmstermio_get_cursor_row(void) {
-       int i, r = 0;
+       int i, r;
        int row = 0;
        char buf[10];
        char *cmd = "\033[6n";
 
        memset(buf, 0, sizeof(buf));
 
-       write(STDOUT_FILENO, cmd, sizeof(cmd));
+       r = write(STDOUT_FILENO, cmd, strlen(cmd));
 
        r = read(STDIN_FILENO, buf, sizeof(buf));
 
@@ -294,6 +294,10 @@
        struct termios tp;
        static struct termios save;
        static int state = 1;
+
+       if (!isatty(STDIN_FILENO)) {
+               stdin = freopen("/dev/tty", "r", stdin);
+       }
        
        if (s == 0) {
                if (tcgetattr(STDIN_FILENO, &tp) == -1) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/no-more-secrets-0.3.3/src/nmstermio_ncurses.c 
new/no-more-secrets-1.0.1/src/nmstermio_ncurses.c
--- old/no-more-secrets-0.3.3/src/nmstermio_ncurses.c   2017-09-20 
15:15:04.000000000 +0200
+++ new/no-more-secrets-1.0.1/src/nmstermio_ncurses.c   2021-09-24 
21:02:46.000000000 +0200
@@ -11,6 +11,8 @@
  * functionality is defined and implemented here.
  */
 
+#include <stdio.h>
+#include <unistd.h>
 #include <string.h>
 #include <ncurses.h>
 
@@ -25,6 +27,9 @@
  * otherwise.
  */
 void nmstermio_init_terminal(void) {
+       if (!isatty(STDIN_FILENO)) {
+               freopen("/dev/tty", "r", stdin);
+       }
        initscr();
        cbreak();
        noecho();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/no-more-secrets-0.3.3/src/sneakers.c 
new/no-more-secrets-1.0.1/src/sneakers.c
--- old/no-more-secrets-0.3.3/src/sneakers.c    2017-09-20 15:15:04.000000000 
+0200
+++ new/no-more-secrets-1.0.1/src/sneakers.c    2021-09-24 21:02:46.000000000 
+0200
@@ -13,8 +13,8 @@
 
 int main(void) {
        int termCols, spaces = 0;
-       char input;
-       char display[2000];
+       unsigned char *display_uc = NULL;
+       char *display        = NULL;
        char *head1Left      = "DATANET PROC RECORD:  45-3456-W-3452";
        char *head1Right     = "Transnet on/xc-3";
        char *head2Center    = "FEDERAL RESERVE TRANSFER NODE";
@@ -32,9 +32,31 @@
 
        // Get terminal dimentions (needed for centering)
        struct winsize w;
-       ioctl(0, TIOCGWINSZ, &w);
+    // if not an interactive tty, w is not populated, resulting in UB
+       if (ioctl(0, TIOCGWINSZ, &w) == -1) {
+        perror("Input not from an interactive terminal");
+        return 1;
+    }
        termCols = w.ws_col;
 
+       // Allocate space for our display string
+       if ((display = malloc(20 * termCols)) == NULL)
+       {
+               fprintf(stderr, "Memory Allocation Error. Quitting!\n");
+               return 1;
+       }
+
+       // Allocate space for our display string
+       if ((display_uc = malloc(20 * termCols)) == NULL)
+       {
+        free(display);
+               fprintf(stderr, "Memory Allocation Error. Quitting!\n");
+               return 1;
+       }
+
+       memset(display, 0, 20 * termCols);
+       memset(display_uc, 0, 20 * termCols);
+
        // Start building the display string
        strcpy(display, head1Left);
 
@@ -158,16 +180,15 @@
        }
        strcat(display, foot2Center);
 
-       // Settings
-       nmseffect_set_input_position(((termCols - strlen(foot2Center)) / 2) + 
2, 18);
-       nmseffect_set_returnopts("123456");
        nmseffect_set_clearscr(1);
 
-       // Execut effect
-       input = nmseffect_exec(display);
-       
-       // Print user choice
-       printf("You chose %c\n", input);
+       memcpy(display_uc, display, 20 * termCols);
+
+       // Execute effect
+       nmseffect_exec(display_uc, strlen(display));
+
+       free(display);
+       free(display_uc);
 
        return 0;
 }

Reply via email to