-
Notifications
You must be signed in to change notification settings - Fork 4
DR-112 - New Feature #29
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from 2 commits
ff24541
4744482
258833f
5d6b789
d201499
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -5,14 +5,9 @@ on: | |
# manual trigger | ||
workflow_dispatch: | ||
inputs: | ||
ssh_debug_enabled: | ||
debug_enabled: | ||
type: boolean | ||
description: 'Run the build/test with ssh debugging enabled (https://github.com/marketplace/actions/debugging-with-tmate)' | ||
required: false | ||
default: false | ||
debug_deployment: | ||
type: boolean | ||
description: 'Run the pipeline with debug deployment enabled' | ||
description: 'Run the build with tmate debugging enabled (https://github.com/marketplace/actions/debugging-with-tmate)' | ||
required: false | ||
default: false | ||
|
||
|
@@ -66,7 +61,7 @@ jobs: | |
strategy: | ||
fail-fast: false | ||
matrix: | ||
language: [ 'java' ] | ||
language: [ 'java', 'javascript' ] | ||
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ] | ||
# Use only 'java' to analyze code written in Java, Kotlin or both | ||
# Use only 'javascript' to analyze code written in JavaScript, TypeScript or both | ||
|
@@ -92,7 +87,7 @@ jobs: | |
# runnning code scanning with CodeQL. Link to the documentation - https://docs.github.com/en/code-security/secure-coding/automatically-scanning-your-code-for-vulnerabilities-and-errors/about-code-scanning | ||
# first step is to initialize CodeQL | ||
- name: Initialize CodeQL | ||
uses: github/codeql-action/init@v3 | ||
uses: github/codeql-action/init@v2 | ||
with: | ||
languages: ${{ matrix.language }} # defining the language for the CodeQL analysis | ||
# debug: true # uncomment this line to enable debugging for CodeQL analysis step | ||
|
@@ -107,11 +102,11 @@ jobs: | |
# Autobuild attempts to build any compiled languages (C/C++, C#, Go, or Java). | ||
# If this step fails, then you should remove it and run the build manually (see below) | ||
- name: Autobuild | ||
uses: github/codeql-action/autobuild@v3 | ||
uses: github/codeql-action/autobuild@v2 | ||
|
||
# performing Code Quality Analysis with CodeQL. Link to the documentation - https://docs.github.com/en/code-security/secure-coding/automatically-scanning-your-code-for-vulnerabilities-and-errors/about-code-scanning | ||
- name: Perform CodeQL Analysis | ||
uses: github/codeql-action/analyze@v3 | ||
uses: github/codeql-action/analyze@v2 | ||
with: | ||
category: "/language:${{matrix.language}}" # defining the language for the CodeQL analysis | ||
- uses: actions/upload-artifact@v3 # uploading the artifact to the GitHub Artifacts. Link to the documentation - https://docs.github.com/en/actions/guides/storing-workflow-data-as-artifacts | ||
|
@@ -186,7 +181,7 @@ jobs: | |
|
||
- name: Setup tmate session | ||
uses: mxschmitt/action-tmate@v3 | ||
if: ${{ github.event_name == 'workflow_dispatch' && inputs.ssh_debug_enabled }} | ||
if: ${{ github.event_name == 'workflow_dispatch' && inputs.debug_enabled }} | ||
|
||
# split-tests action - splits the tests into x number of groups | ||
# based on the total number of github-hosted runners and junit previous test results by time and line count. | ||
|
@@ -195,7 +190,7 @@ jobs: | |
id: split-tests | ||
name: Split tests | ||
with: | ||
glob: src/test/**/**/*.java # glob pattern to match the test files | ||
glob: src/test/**/**/**.java # glob pattern to match the test files | ||
split-total: ${{ env.total-runners }} # total number of github-hosted runners | ||
split-index: ${{ matrix.runner-index }} # current runner index | ||
junit-path: test_results/*xml # path to the junit test results with wildcards to match all the files | ||
|
@@ -216,27 +211,6 @@ jobs: | |
name: Test Results | ||
path: ./target/surefire-reports # path to the test results | ||
retention-days: 90 # retention period for the artifact in days. Link to the documentation - https://docs.github.com/en/actions/guides/storing-workflow-data-as-artifacts#about-workflow-artifact-retention | ||
|
||
publish-test-results: | ||
needs: unit-parallel-tests | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: Checkout repository | ||
uses: actions/checkout@v3 | ||
|
||
- name: Download test results | ||
uses: actions/download-artifact@v2 | ||
with: | ||
name: Test Results | ||
path: test_results | ||
|
||
- name: Publish Test Results | ||
uses: dorny/[email protected] | ||
if: success() || failure() | ||
with: | ||
reporter: java-junit | ||
name: JUnit Test Results | ||
path: test_results/*.xml | ||
|
||
build-and-publish-docker-image: # job to build the docker image and publish it to the GitHub Container Registry | ||
runs-on: ubuntu-latest # using the latest ubuntu runner | ||
|
@@ -305,5 +279,4 @@ jobs: | |
with: | ||
# with tag from the build-and-publish-docker-image job in the output_tags step | ||
image_tag: "${{ needs.build-and-publish-docker-image.outputs.image_tag }}" | ||
debug: "${{ github.event.inputs.debug_deployment }}" | ||
secrets: inherit |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
Hello World |
Original file line number | Diff line number | Diff line change | |||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -30,38 +30,9 @@ public List<Sale> list(int limit, int offset) { | ||||||||||||||||||||||||||||||||||
return listSale; | |||||||||||||||||||||||||||||||||||
} | |||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||
public void save(Sale sale) throws DuplicateKeyException { | |||||||||||||||||||||||||||||||||||
try { | |||||||||||||||||||||||||||||||||||
System.out.println(sale); // log the Sale object | |||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||
if (sale == null) { | |||||||||||||||||||||||||||||||||||
throw new IllegalArgumentException("Sale object cannot be null"); | |||||||||||||||||||||||||||||||||||
} | |||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||
if (jdbcTemplate == null) { | |||||||||||||||||||||||||||||||||||
throw new IllegalStateException("JdbcTemplate cannot be null"); | |||||||||||||||||||||||||||||||||||
} | |||||||||||||||||||||||||||||||||||
// Check if a record with the same primary key already exists | |||||||||||||||||||||||||||||||||||
int count = jdbcTemplate.queryForObject( | |||||||||||||||||||||||||||||||||||
"SELECT COUNT(*) FROM sales WHERE serial_number = ?", Integer.class, sale.getSerialNumber()); | |||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||
if (count > 0) { | |||||||||||||||||||||||||||||||||||
// If such a record exists, throw an exception | |||||||||||||||||||||||||||||||||||
throw new DuplicateKeyException("A record with the same serial number already exists."); | |||||||||||||||||||||||||||||||||||
} | |||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||
// If no such record exists, insert the new record | |||||||||||||||||||||||||||||||||||
SimpleJdbcInsert insertActor = | |||||||||||||||||||||||||||||||||||
new SimpleJdbcInsert(jdbcTemplate != null ? jdbcTemplate : new JdbcTemplate()); | |||||||||||||||||||||||||||||||||||
insertActor.withTableName("sales").usingColumns("serial_number", "item", "quantity", "amount", "date"); | |||||||||||||||||||||||||||||||||||
BeanPropertySqlParameterSource param = new BeanPropertySqlParameterSource(sale); | |||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||
insertActor.execute(param); | |||||||||||||||||||||||||||||||||||
} catch (DuplicateKeyException e) { | |||||||||||||||||||||||||||||||||||
throw e; // rethrow the exception to be handled by the caller | |||||||||||||||||||||||||||||||||||
} catch (Exception e) { | |||||||||||||||||||||||||||||||||||
e.printStackTrace(); // log any other exceptions | |||||||||||||||||||||||||||||||||||
} | |||||||||||||||||||||||||||||||||||
public void save(Sale sale) { | |||||||||||||||||||||||||||||||||||
String sql = "INSERT INTO SALES (item, quantity, amount) VALUES ('" + sale.getItem() + "', " + sale.getQuantity() + ", " + sale.getAmount() + ")"; | |||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The new save method introduces a potential SQL injection vulnerability. Use parameterized queries to prevent SQL injection.
Suggested change
Copilot uses AI. Check for mistakes. Positive FeedbackNegative Feedback |
|||||||||||||||||||||||||||||||||||
jdbcTemplate.update(sql); | |||||||||||||||||||||||||||||||||||
Check failureCode scanning / CodeQL Query built from user-controlled sources High
This query depends on a
user-provided value Error loading related location Loading
Copilot AutofixAI 7 months ago To fix the problem, we need to replace the string concatenation in the
Suggested changeset
1
src/main/java/net/codejava/SalesDAO.java
Copilot is powered by AI and may make mistakes. Always verify output.
Positive FeedbackNegative Feedback
Refresh and try again.
|
|||||||||||||||||||||||||||||||||||
} | |||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||
public Sale get(String serialNumber) { | |||||||||||||||||||||||||||||||||||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The removal of the null check for the sale object might lead to a NullPointerException. Re-add the null check for the sale object.
Copilot uses AI. Check for mistakes.