diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c
new file mode 100644
index 764534a..8225159
*** a/src/bin/psql/command.c
--- b/src/bin/psql/command.c
*************** exec_command(const char *cmd,
*** 746,762 ****
  		{
  			expand_tilde(&fname);
  			pset.gfname = pg_strdup(fname);
  		}
- 		free(fname);
  		status = PSQL_CMD_SEND;
  	}
  
  	/* \gset [prefix] -- send query and store result into variables */
  	else if (strcmp(cmd, "gset") == 0)
  	{
! 		char	   *prefix = psql_scan_slash_option(scan_state,
! 													OT_NORMAL, NULL, false);
  
  		if (prefix)
  			pset.gset_prefix = prefix;
  		else
--- 746,766 ----
  		{
  			expand_tilde(&fname);
  			pset.gfname = pg_strdup(fname);
+ 			free(fname);
  		}
  		status = PSQL_CMD_SEND;
  	}
  
  	/* \gset [prefix] -- send query and store result into variables */
  	else if (strcmp(cmd, "gset") == 0)
  	{
! 		char	   *prefix;
! 
! 		if (pset.gset_prefix)
! 			free(pset.gset_prefix);
  
+ 		prefix = psql_scan_slash_option(scan_state,
+ 										OT_NORMAL, NULL, false);
  		if (prefix)
  			pset.gset_prefix = prefix;
  		else
*************** exec_command(const char *cmd,
*** 1152,1159 ****
  				success = false;
  			}
  			free(newval);
  		}
- 		free(opt0);
  	}
  
  
--- 1156,1163 ----
  				success = false;
  			}
  			free(newval);
+ 			free(opt0);
  		}
  	}
  
  
