Cleaned up source, fixed a couple more segfaults

master
Pentium44 2021-04-06 15:52:31 -07:00
parent 1a3727f451
commit 8356d6de8a
10 changed files with 207 additions and 159 deletions

View File

@ -7,13 +7,13 @@ VERSION_EXTRA = \"$(EXTRA)\"
PREFIX ?= /usr
CC ?= cc
CFLAGS += -O2 -ansi -pedantic -g -Wall -Wextra --param=ssp-buffer-size=2 -fstack-protector-all
CC ?= gcc
CFLAGS += -O2 -pedantic -g -Wall -Wextra --param=ssp-buffer-size=2 -fstack-protector-all
CPPFLAGS += -DVERSION=$(VERSION) -DVERSION_EXTRA=$(VERSION_EXTRA) -D_FORTIFY_SOURCE=2
LDFLAGS += -Wl,-O1,--sort-common,--hash-style=gnu,-z,relro
BIN ?= slidescript
OBJECTS = src/main.o src/functions.o src/util.o
OBJECTS = src/main.o src/functions.o src/util.o src/vars.o src/enc.o
all: main

48
src/enc.c Normal file
View File

@ -0,0 +1,48 @@
/*
SlideScript - minimalistic top-down scripting language.
(C) Copyright 2014-2021 Chris Dorman - some rights reserved (CC-BY-SA 3.0)
View README file supplied with this software for more details
*/
#include "deps.h"
#include "enc.h"
char *ss_encrypt(char *string)
{
int i;
int str_len;
str_len = strlen(string);
for(i = 0; (i < str_len && string[i] != NULLBYTE); i++)
string[i] = string[i] + ENCOFFSET;
for(i = 0; (i < str_len && string[i] != NULLBYTE); i+=3)
string[i] = string[i] - ENCSTEPODD;
for(i = 0; (i < str_len && string[i] != NULLBYTE); i+=4)
string[i] = string[i] + ENCSTEPEVEN;
return string;
}
char *ss_decrypt(char *string)
{
int i;
int str_len;
str_len = strlen(string);
for(i = 0; (i < str_len && string[i] != NULLBYTE); i++)
string[i] = string[i] - ENCOFFSET;
for(i = 0; (i < str_len && string[i] != NULLBYTE); i+=3)
string[i] = string[i] + ENCSTEPODD;
for(i = 0; (i < str_len && string[i] != NULLBYTE); i+=4)
string[i] = string[i] - ENCSTEPEVEN;
return string;
}

10
src/enc.h Normal file
View File

@ -0,0 +1,10 @@
/*
SlideScript - minimalistic top-down scripting language.
(C) Copyright 2014-2021 Chris Dorman - some rights reserved (CC-BY-SA 3.0)
View README file supplied with this software for more details
*/
char *ss_encrypt(char *string);
char *ss_decrypt(char *string);

View File

@ -8,48 +8,14 @@
#include "deps.h"
#include "functions.h"
#include "util.h"
char *ss_encrypt(char *string)
{
int i;
int str_len;
str_len = strlen(string);
for(i = 0; (i < str_len && string[i] != NULLBYTE); i++)
string[i] = string[i] + ENCOFFSET;
for(i = 0; (i < str_len && string[i] != NULLBYTE); i+=3)
string[i] = string[i] - ENCSTEPODD;
for(i = 0; (i < str_len && string[i] != NULLBYTE); i+=4)
string[i] = string[i] + ENCSTEPEVEN;
return string;
}
char *ss_decrypt(char *string)
{
int i;
int str_len;
str_len = strlen(string);
for(i = 0; (i < str_len && string[i] != NULLBYTE); i++)
string[i] = string[i] - ENCOFFSET;
for(i = 0; (i < str_len && string[i] != NULLBYTE); i+=3)
string[i] = string[i] + ENCSTEPODD;
for(i = 0; (i < str_len && string[i] != NULLBYTE); i+=4)
string[i] = string[i] - ENCSTEPEVEN;
return string;
}
#include "vars.h"
#include "enc.h"
int process_line(char *line)
{
char *tok_srch = strtok(line, "=\" ");
char *tok_srch;
tok_srch = strtok(line, "=\" |");
/* reuse function */
/*else if(strncmp("temp",tok_srch,4) == 0)
@ -69,9 +35,15 @@ int process_line(char *line)
char *parsed;
tok_srch = strtok(NULL, "\"");
parsed = parse_vars(tok_srch);
if(parsed != NULL) printf("%s\n", parsed);
/* printf("%s\n", tok_srch); */
} /* print function */
if(parsed != NULL)
{
printf("%s\n", parsed);
}
else
{
syn_error("ss:error:print compulation error!");
}
}
/* sleep function */
else if(strncmp("sleep",tok_srch,5) == 0)
@ -124,7 +96,7 @@ int process_line(char *line)
return_val = system(cmd_line);
if(return_val != 0)
{
printf("ss:%s exited with error code %d\n", cmd_line, return_val);
printf("ss:warning:%s exited with error code %d\n", cmd_line, return_val);
}
}
@ -149,6 +121,10 @@ int process_line(char *line)
/* strtok to the content that will be written to file */
tok_srch = strtok(NULL, "\"");
tok_srch = strtok(NULL, "\"");
if(strcmp(tok_srch, "\n") == 0 ||
strcmp(tok_srch, " \n") == 0 || tok_srch != NULL)
syn_error("ss:error:write syntax error");
file_content = parse_vars(tok_srch);
fprintf(write_file, "%s\n", file_content);
fclose(write_file);

View File

@ -5,6 +5,4 @@
View README file supplied with this software for more details
*/
char *ss_encrypt(char *string);
char *ss_decrypt(char *string);
int process_line(char *line);

View File

@ -31,101 +31,6 @@ char *strip_nl (char *string)
}
}
void set_var(int index, char *varname, char *vardata)
{
strcpy(svars[index].var_name, varname);
strcpy(svars[index].var_data, vardata);
}
char *get_var_data(char *varname)
{
int xx;
for(xx = 0; xx < MAXVARS; xx++)
{
char *varp = svars[xx].var_name;
if(*varp == '\0') continue;
if(strcmp(varp, varname) == 0)
{
return svars[xx].var_data;
}
}
return NULL;
}
int get_var_count()
{
int yy;
for(yy = 0; yy < MAXVARS; yy++)
{
if(strlen(svars[yy].var_name) > 0)
{
continue;
}
else
{
return yy;
}
}
return 0;
}
char *parse_vars(char *string)
{
int str_char, buf_len, var_len;
static char finished [MAX_STRING_BUFSIZE];
char varbuffer [MAX_VAR_NAME_BUFSIZE];
/* String pointers */
char *input_pointer;
char *output_pointer;
char *variable_pointer;
*finished = NULLBYTE;
for (input_pointer = string, output_pointer = finished;
(str_char = *input_pointer) != NULLBYTE;
input_pointer++)
{
if (str_char != TOKEN)
{ *output_pointer++ = str_char; *output_pointer = NULLBYTE; continue; }
variable_pointer = varbuffer;
do { *variable_pointer++ = (str_char = *++input_pointer); }
while ((str_char != NULLBYTE) && (str_char != TOKEN));
str_char = *input_pointer;
if ((str_char != NULLBYTE) && (str_char != TOKEN))
syn_error("ss:error:buffer out of sync");
str_char = variable_pointer [-1];
if ((str_char != NULLBYTE) && (str_char != TOKEN))
syn_error("ss:error:buffer out of sync");
variable_pointer[-1] = NULLBYTE;
if(*varbuffer == NULLBYTE)
syn_error("ss:error:variable syntax error!");
variable_pointer = get_var_data(varbuffer);
if(variable_pointer == NULL)
syn_error("ss:error:variable syntax error!");
var_len = strlen(variable_pointer);
buf_len = strlen(finished) + var_len;
if(buf_len > MAX_STRING_LEN)
syn_error("ss:error:string buffer overflow!");
strcat (finished, variable_pointer);
output_pointer += var_len;
if(*input_pointer == NULLBYTE) break;
}
*output_pointer = NULLBYTE;
return finished;
}
void parse_args(int argc, char** argv)
{
/* -h flag given, show help */

View File

@ -5,19 +5,6 @@
View README file supplied with this software for more details
*/
struct s_variables
{
char var_name [MAX_VAR_NAME_LEN];
char var_data [MAX_VAR_DATA_LEN];
};
typedef struct s_variables VARS;
VARS svars[MAXVARS];
void syn_error(char *message);
char *strip_nl(char *string);
void set_var(int index, char *varname, char *vardata);
int get_var_count();
char *get_var_data(char *varname);
char *parse_vars(char *string);
void parse_args(int argc, char** argv);

104
src/vars.c Normal file
View File

@ -0,0 +1,104 @@
/*
SlideScript - minimalistic top-down scripting language.
(C) Copyright 2014-2021 Chris Dorman - some rights reserved (CC-BY-SA 3.0)
View README file supplied with this software for more details
*/
#include "deps.h"
#include "vars.h"
#include "util.h"
void set_var(int index, char *varname, char *vardata)
{
strcpy(svars[index].var_name, varname);
strcpy(svars[index].var_data, vardata);
}
char *get_var_data(char *varname)
{
int xx;
for(xx = 0; xx < MAXVARS; xx++)
{
char *varp = svars[xx].var_name;
if(*varp == '\0') continue;
if(strcmp(varp, varname) == 0)
{
return svars[xx].var_data;
}
}
return NULL;
}
int get_var_count()
{
int yy;
for(yy = 0; yy < MAXVARS; yy++)
{
if(strlen(svars[yy].var_name) > 0)
{
continue;
}
else
{
return yy;
}
}
return 0;
}
char *parse_vars(char *string)
{
int str_char, buf_len, var_len;
static char finished [MAX_STRING_BUFSIZE];
char varbuffer [MAX_VAR_NAME_BUFSIZE];
/* String pointers */
char *input_pointer;
char *output_pointer;
char *variable_pointer;
*finished = NULLBYTE;
for (input_pointer = string, output_pointer = finished;
(str_char = *input_pointer) != NULLBYTE;
input_pointer++)
{
if (str_char != TOKEN)
{ *output_pointer++ = str_char; *output_pointer = NULLBYTE; continue; }
variable_pointer = varbuffer;
do { *variable_pointer++ = (str_char = *++input_pointer); }
while ((str_char != NULLBYTE) && (str_char != TOKEN));
str_char = *input_pointer;
if ((str_char != NULLBYTE) && (str_char != TOKEN))
syn_error("ss:error:buffer out of sync");
str_char = variable_pointer [-1];
if ((str_char != NULLBYTE) && (str_char != TOKEN))
syn_error("ss:error:buffer out of sync");
variable_pointer[-1] = NULLBYTE;
if(*varbuffer == NULLBYTE)
syn_error("ss:error:variable syntax error!");
variable_pointer = get_var_data(varbuffer);
if(variable_pointer == NULL)
syn_error("ss:error:variable syntax error!");
var_len = strlen(variable_pointer);
buf_len = strlen(finished) + var_len;
if(buf_len > MAX_STRING_LEN)
syn_error("ss:error:string buffer overflow!");
strcat (finished, variable_pointer);
output_pointer += var_len;
if(*input_pointer == NULLBYTE) break;
}
*output_pointer = NULLBYTE;
return finished;
}

20
src/vars.h Normal file
View File

@ -0,0 +1,20 @@
/*
SlideScript - minimalistic top-down scripting language.
(C) Copyright 2014-2021 Chris Dorman - some rights reserved (CC-BY-SA 3.0)
View README file supplied with this software for more details
*/
struct s_variables
{
char var_name [MAX_VAR_NAME_LEN];
char var_data [MAX_VAR_DATA_LEN];
};
typedef struct s_variables VARS;
VARS svars[MAXVARS];
void set_var(int index, char *varname, char *vardata);
int get_var_count();
char *get_var_data(char *varname);
char *parse_vars(char *string);

View File

@ -5,9 +5,9 @@
# Sets 'ss_filename' to 'file.txt'
ss_filename=file.txt
# Sets 'ss_exec_command' to 'ls -al'
ss_exec_command=uname -a
ss_exec_command=ls -al
# Sets 'ss_decoded' to 'Encrypt This Data!'
ss_decoded=Decrypt This Data!
ss_decoded=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ/][-_.,?!
# Sets 'ss_encoded' to 'Ghfs~su#Yilv#Gduf$'
ss_encoded=Ghfs~su#Yilv#Gduf$
# Sets 'ss_file_content' to 'This will be written to file.txt!'
@ -22,7 +22,7 @@ print "Sleeping before writing '%ss_file_content%' to '%ss_filename%'"
sleep 1
# Writes the content of ss_file_content to ss_filename
write "%ss_filename%" "%ss_file_content%"
write "%ss_filename%"
print "Data written to %ss_filename%:"
# Reads data and prints to screen from ss_filename